diff --git a/docs/content/using-npm/config.md b/docs/content/using-npm/config.md index 83a385e08344f..0af538fed52bc 100644 --- a/docs/content/using-npm/config.md +++ b/docs/content/using-npm/config.md @@ -1190,6 +1190,8 @@ When package package-locks are disabled, automatic pruning of extraneous modules will also be disabled. To remove extraneous modules with package-locks disabled use `npm prune`. +This configuration does not affect `npm ci`. + diff --git a/lib/commands/ci.js b/lib/commands/ci.js index 376a85d60eedf..5e862a473a70f 100644 --- a/lib/commands/ci.js +++ b/lib/commands/ci.js @@ -38,6 +38,7 @@ class CI extends ArboristWorkspaceCmd { const where = this.npm.prefix const opts = { ...this.npm.flatOptions, + packageLock: true, // npm ci should never skip lock files path: where, log, save: false, // npm ci should never modify the lockfile or package.json diff --git a/lib/utils/config/definitions.js b/lib/utils/config/definitions.js index 95d79f0f05325..79222881c9734 100644 --- a/lib/utils/config/definitions.js +++ b/lib/utils/config/definitions.js @@ -1417,6 +1417,8 @@ define('package-lock', { When package package-locks are disabled, automatic pruning of extraneous modules will also be disabled. To remove extraneous modules with package-locks disabled use \`npm prune\`. + + This configuration does not affect \`npm ci\`. `, flatten: (key, obj, flatOptions) => { flatten(key, obj, flatOptions) diff --git a/tap-snapshots/test/lib/utils/config/definitions.js.test.cjs b/tap-snapshots/test/lib/utils/config/definitions.js.test.cjs index 459c5de8dc284..ab706be89b835 100644 --- a/tap-snapshots/test/lib/utils/config/definitions.js.test.cjs +++ b/tap-snapshots/test/lib/utils/config/definitions.js.test.cjs @@ -1271,6 +1271,8 @@ will also prevent _writing_ \`package-lock.json\` if \`save\` is true. When package package-locks are disabled, automatic pruning of extraneous modules will also be disabled. To remove extraneous modules with package-locks disabled use \`npm prune\`. + +This configuration does not affect \`npm ci\`. ` exports[`test/lib/utils/config/definitions.js TAP > config description for package-lock-only 1`] = ` diff --git a/tap-snapshots/test/lib/utils/config/describe-all.js.test.cjs b/tap-snapshots/test/lib/utils/config/describe-all.js.test.cjs index ffa6617328bc6..58958ebdab954 100644 --- a/tap-snapshots/test/lib/utils/config/describe-all.js.test.cjs +++ b/tap-snapshots/test/lib/utils/config/describe-all.js.test.cjs @@ -1064,6 +1064,8 @@ When package package-locks are disabled, automatic pruning of extraneous modules will also be disabled. To remove extraneous modules with package-locks disabled use \`npm prune\`. +This configuration does not affect \`npm ci\`. + diff --git a/test/lib/commands/ci.js b/test/lib/commands/ci.js index e077c99eec432..978cd03b877e6 100644 --- a/test/lib/commands/ci.js +++ b/test/lib/commands/ci.js @@ -232,7 +232,7 @@ t.test('should throw ECIGLOBAL', async t => { }) t.test('should remove existing node_modules before installing', async t => { - t.plan(2) + t.plan(3) const testDir = t.testdir({ node_modules: { 'some-file': 'some contents', @@ -245,6 +245,7 @@ t.test('should remove existing node_modules before installing', async t => { '@npmcli/arborist': function () { this.loadVirtual = () => Promise.resolve(true) this.reify = async (options) => { + t.equal(options.packageLock, true, 'npm ci should never ignore lock') t.equal(options.save, false, 'npm ci should never save') // check if node_modules was removed before reifying const contents = await readdir(testDir)