Skip to content

Commit 398ded6

Browse files
authored
Add pnpm enforcement and config (#182)
Introduces a GitHub Actions workflow to reject pull requests containing `package-lock.json`. Adds an `.npmrc` file to enforce strict engine versions. Modifies `package.json` to include a `preinstall` script that checks for `pnpm` usage and sets up `devEngines` to specify the required package manager.
1 parent 443f631 commit 398ded6

3 files changed

Lines changed: 31 additions & 0 deletions

File tree

.github/workflows/enforce-pnpm.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
name: Enforce pnpm
2+
3+
on:
4+
pull_request:
5+
push:
6+
7+
jobs:
8+
reject-npm-lockfile:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
12+
- name: Reject npm lockfiles
13+
run: |
14+
if git ls-files | grep -E '(^|/)package-lock\.json$'; then
15+
echo "Remove package-lock.json and use pnpm."
16+
exit 1
17+
fi

.npmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
engine-strict=true

package.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,24 @@
2323
"jsdist/**/*"
2424
],
2525
"scripts": {
26+
"preinstall": "node -e \"const userAgent = process.env.npm_config_user_agent || ''; if (process.env.INIT_CWD === process.cwd() && !userAgent.includes('pnpm/')) { console.error('Use pnpm in this repo.'); process.exit(1); }\"",
2627
"build": "tsup",
2728
"watch": "tsup --watch",
2829
"docs": "npx typedoc --options typedoc.json js/index.ts",
2930
"test": "vitest"
3031
},
32+
"engines": {
33+
"pnpm": ">=10.27.0",
34+
"npm": "please-use-pnpm",
35+
"yarn": "please-use-pnpm"
36+
},
37+
"devEngines": {
38+
"packageManager": {
39+
"name": "pnpm",
40+
"version": ">=10.27.0",
41+
"onFail": "error"
42+
}
43+
},
3144
"author": "",
3245
"license": "MIT",
3346
"devDependencies": {

0 commit comments

Comments
 (0)