Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuy Adorno <ruyadorno@hotmail.com>2022-05-10 21:19:04 +0300
committerGitHub <noreply@github.com>2022-05-10 21:19:04 +0300
commit5a50762faa37ae5964ae6f12595b20b367056c0a (patch)
treeab51e6b8696431b544aace41a94d2e7bf7651661 /workspaces/arborist/test
parentf985dbbd9ad3910c65e023f55beac9ec691c5e2c (diff)
fix(arborist): link deps lifecycle scripts (#4875)
- Fixes running proper lifecycle scripts for linked deps and workspaces. - Added test to validate lifecycle scripts don't run twice for linked deps - Tweaked "reify workspaces bin files" test to also validate proper lifecycle scripts ran before check for linked bins. - Tweaked reify test running lifecycle scripts of unchanged link nodes to also validate that the install lifecycle scripts are also called. Fixes: https://github.com/npm/cli/issues/4277 Fixes: https://github.com/npm/cli/issues/4552 Fixes: https://github.com/npm/statusboard/issues/439 Relates to: https://github.com/npm/cli/issues/2905
Diffstat (limited to 'workspaces/arborist/test')
-rw-r--r--workspaces/arborist/test/arborist/rebuild.js45
-rw-r--r--workspaces/arborist/test/arborist/reify.js2
-rw-r--r--workspaces/arborist/test/fixtures/link-dep-lifecycle-scripts/a/package.json3
-rw-r--r--workspaces/arborist/test/fixtures/reify-cases/link-dep-lifecycle-scripts.js3
-rw-r--r--workspaces/arborist/test/fixtures/reify-cases/workspaces-link-bin.js5
-rw-r--r--workspaces/arborist/test/fixtures/workspaces-link-bin/packages/b/create-file.js1
-rw-r--r--workspaces/arborist/test/fixtures/workspaces-link-bin/packages/b/file.js0
-rw-r--r--workspaces/arborist/test/fixtures/workspaces-link-bin/packages/b/package.json3
8 files changed, 59 insertions, 3 deletions
diff --git a/workspaces/arborist/test/arborist/rebuild.js b/workspaces/arborist/test/arborist/rebuild.js
index e75895628..37551c748 100644
--- a/workspaces/arborist/test/arborist/rebuild.js
+++ b/workspaces/arborist/test/arborist/rebuild.js
@@ -459,6 +459,51 @@ t.test('do not rebuild node-gyp dependencies with gypfile:false', async t => {
await arb.rebuild()
})
+// ref: https://github.com/npm/cli/issues/2905
+t.test('do not run lifecycle scripts of linked deps twice', async t => {
+ const testdir = t.testdir({
+ project: {
+ 'package.json': JSON.stringify({
+ name: 'my-project',
+ version: '1.0.0',
+ dependencies: {
+ foo: 'file:../foo',
+ },
+ }),
+ node_modules: {
+ foo: t.fixture('symlink', '../../foo'),
+ },
+ },
+ foo: {
+ 'package.json': JSON.stringify({
+ name: 'foo',
+ version: '1.0.0',
+ scripts: {
+ postinstall: 'echo "ok"',
+ },
+ }),
+ },
+ })
+
+ const path = resolve(testdir, 'project')
+ const RUNS = []
+ const Arborist = t.mock('../../lib/arborist/index.js', {
+ '@npmcli/run-script': opts => {
+ RUNS.push(opts)
+ return require('@npmcli/run-script')(opts)
+ },
+ })
+ const arb = new Arborist({ path, registry })
+ await arb.rebuild()
+ t.equal(RUNS.length, 1, 'should run postinstall script only once')
+ t.match(RUNS, [
+ {
+ event: 'postinstall',
+ pkg: { name: 'foo' },
+ },
+ ])
+})
+
t.test('workspaces', async t => {
const path = t.testdir({
'package.json': JSON.stringify({
diff --git a/workspaces/arborist/test/arborist/reify.js b/workspaces/arborist/test/arborist/reify.js
index 509700404..a77b0fbb2 100644
--- a/workspaces/arborist/test/arborist/reify.js
+++ b/workspaces/arborist/test/arborist/reify.js
@@ -1770,6 +1770,8 @@ t.test('running lifecycle scripts of unchanged link nodes on reify', async t =>
t.ok(fs.lstatSync(resolve(path, 'a/a-prepare')).isFile(),
'should run prepare lifecycle scripts for links directly linked to the tree')
+ t.ok(fs.lstatSync(resolve(path, 'a/a-post-install')).isFile(),
+ 'should run postinstall lifecycle scripts for links directly linked to the tree')
})
t.test('save-prod, with optional', async t => {
diff --git a/workspaces/arborist/test/fixtures/link-dep-lifecycle-scripts/a/package.json b/workspaces/arborist/test/fixtures/link-dep-lifecycle-scripts/a/package.json
index e545ad686..f239bf31d 100644
--- a/workspaces/arborist/test/fixtures/link-dep-lifecycle-scripts/a/package.json
+++ b/workspaces/arborist/test/fixtures/link-dep-lifecycle-scripts/a/package.json
@@ -2,6 +2,7 @@
"name": "a",
"version": "1.0.0",
"scripts": {
- "prepare": "node -e \"require('fs').writeFileSync(require('path').resolve('a-prepare'), '')\""
+ "prepare": "node -e \"require('fs').writeFileSync('a-prepare', '')\"",
+ "postinstall": "node -e \"require('fs').writeFileSync('a-post-install', '')\""
}
}
diff --git a/workspaces/arborist/test/fixtures/reify-cases/link-dep-lifecycle-scripts.js b/workspaces/arborist/test/fixtures/reify-cases/link-dep-lifecycle-scripts.js
index 651761d5a..5f75cf33f 100644
--- a/workspaces/arborist/test/fixtures/reify-cases/link-dep-lifecycle-scripts.js
+++ b/workspaces/arborist/test/fixtures/reify-cases/link-dep-lifecycle-scripts.js
@@ -6,7 +6,8 @@ module.exports = t => {
"name": "a",
"version": "1.0.0",
"scripts": {
- "prepare": "node -e \"require('fs').writeFileSync(require('path').resolve('a-prepare'), '')\""
+ "prepare": "node -e \"require('fs').writeFileSync('a-prepare', '')\"",
+ "postinstall": "node -e \"require('fs').writeFileSync('a-post-install', '')\""
}
})
},
diff --git a/workspaces/arborist/test/fixtures/reify-cases/workspaces-link-bin.js b/workspaces/arborist/test/fixtures/reify-cases/workspaces-link-bin.js
index ceca15eeb..59120e2ed 100644
--- a/workspaces/arborist/test/fixtures/reify-cases/workspaces-link-bin.js
+++ b/workspaces/arborist/test/fixtures/reify-cases/workspaces-link-bin.js
@@ -25,13 +25,16 @@ module.exports = t => {
})
},
"b": {
- "file.js": "",
+ "create-file.js": "require('fs').writeFileSync('file.js', '')\n",
"package.json": JSON.stringify({
"name": "b",
"version": "1.0.0",
"files": [
"file.js"
],
+ "scripts": {
+ "preinstall": "node create-file.js"
+ },
"bin": "file.js"
})
}
diff --git a/workspaces/arborist/test/fixtures/workspaces-link-bin/packages/b/create-file.js b/workspaces/arborist/test/fixtures/workspaces-link-bin/packages/b/create-file.js
new file mode 100644
index 000000000..937f47da3
--- /dev/null
+++ b/workspaces/arborist/test/fixtures/workspaces-link-bin/packages/b/create-file.js
@@ -0,0 +1 @@
+require('fs').writeFileSync('file.js', '')
diff --git a/workspaces/arborist/test/fixtures/workspaces-link-bin/packages/b/file.js b/workspaces/arborist/test/fixtures/workspaces-link-bin/packages/b/file.js
deleted file mode 100644
index e69de29bb..000000000
--- a/workspaces/arborist/test/fixtures/workspaces-link-bin/packages/b/file.js
+++ /dev/null
diff --git a/workspaces/arborist/test/fixtures/workspaces-link-bin/packages/b/package.json b/workspaces/arborist/test/fixtures/workspaces-link-bin/packages/b/package.json
index 52a65b6fa..3d0b8d0b8 100644
--- a/workspaces/arborist/test/fixtures/workspaces-link-bin/packages/b/package.json
+++ b/workspaces/arborist/test/fixtures/workspaces-link-bin/packages/b/package.json
@@ -2,5 +2,8 @@
"name": "b",
"version": "1.0.0",
"files": ["file.js"],
+ "scripts": {
+ "preinstall": "node create-file.js"
+ },
"bin": "file.js"
}