Skip to content

Commit 02c23a5

Browse files
committed
Add check for engines
1 parent 3915187 commit 02c23a5

File tree

3 files changed

+34
-2
lines changed

3 files changed

+34
-2
lines changed

.circleci/config.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,5 +120,8 @@ jobs:
120120
paths:
121121
- node_modules
122122
- run:
123-
name: Test
123+
name: Lint
124124
command: npm run lint
125+
- run:
126+
name: Check
127+
command: npm run valid

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
"update": "node ./tools/update.js",
2121
"docs:watch": "vuepress dev docs",
2222
"predocs:build": "npm run update",
23-
"docs:build": "vuepress build docs"
23+
"docs:build": "vuepress build docs",
24+
"valid": "node tools/valid-dependencies-engines"
2425
},
2526
"files": [
2627
"lib"

tools/valid-dependencies-engines.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* @author Yosuke Ota
3+
* See LICENSE file in root directory for full license.
4+
*/
5+
'use strict'
6+
7+
const cp = require('child_process')
8+
const semver = require('semver')
9+
const pkg = require('../package.json')
10+
const nodeVer = pkg.engines.node
11+
const deps = { ...pkg.dependencies, ...pkg.peerDependencies }
12+
13+
for (const [name, ver] of Object.entries(deps)) {
14+
// eslint-disable-next-line no-console
15+
// console.log(`call npm view "${name}@${ver}" --json`)
16+
const json = cp.execSync(`npm view "${name}@${ver}" --json`, {
17+
maxBuffer: 1024 * 1024 * 100
18+
})
19+
const meta = JSON.parse(json)
20+
const v = meta.engines && meta.engines.node
21+
if (v && !semver.subset(nodeVer, v)) {
22+
// eslint-disable-next-line no-console
23+
console.error(
24+
`"${name}@${ver}" is not compatible with "node@${nodeVer}".\nAllowed is:${v}`
25+
)
26+
process.exit(1)
27+
}
28+
}

0 commit comments

Comments
 (0)