From 5fc516b8ca254207c402c9b14e5f7fc2a1424996 Mon Sep 17 00:00:00 2001 From: Luke Karrys Date: Tue, 25 Oct 2022 20:33:28 -0700 Subject: [PATCH] chore: update snapshot tests for new docs --- .../{ci-docs.yml => ci-npmcli-docs.yml} | 8 +- DEPENDENCIES.md | 39 +- docs/package.json | 4 +- lib/commands/completion.js | 4 +- lib/commands/publish.js | 2 +- lib/commands/unpublish.js | 2 +- lib/utils/cmd-list.js | 10 +- lib/utils/config/describe-all.js | 20 - lib/utils/config/flatten.js | 33 - lib/utils/config/index.js | 59 +- lib/utils/did-you-mean.js | 4 +- lib/utils/npm-usage.js | 6 +- package-lock.json | 61 +- package.json | 1 + tap-snapshots/test/lib/docs.js.test.cjs | 4321 +++++++++++++++++ .../test/lib/load-all-commands.js.test.cjs | 1024 ---- .../test/lib/utils/cmd-list.js.test.cjs | 491 -- .../lib/utils/config/definitions.js.test.cjs | 2006 -------- .../lib/utils/config/describe-all.js.test.cjs | 1996 -------- .../test/lib/utils/config/index.js.test.cjs | 139 - test/fixtures/mock-npm.js | 3 + test/lib/docs.js | 98 + test/lib/load-all-commands.js | 9 +- test/lib/npm.js | 29 +- test/lib/utils/cmd-list.js | 4 - test/lib/utils/config/definitions.js | 11 - test/lib/utils/config/describe-all.js | 6 - test/lib/utils/config/flatten.js | 38 - test/lib/utils/config/index.js | 71 +- 29 files changed, 4585 insertions(+), 5914 deletions(-) rename .github/workflows/{ci-docs.yml => ci-npmcli-docs.yml} (93%) delete mode 100644 lib/utils/config/describe-all.js delete mode 100644 lib/utils/config/flatten.js create mode 100644 tap-snapshots/test/lib/docs.js.test.cjs delete mode 100644 tap-snapshots/test/lib/load-all-commands.js.test.cjs delete mode 100644 tap-snapshots/test/lib/utils/cmd-list.js.test.cjs delete mode 100644 tap-snapshots/test/lib/utils/config/definitions.js.test.cjs delete mode 100644 tap-snapshots/test/lib/utils/config/describe-all.js.test.cjs delete mode 100644 tap-snapshots/test/lib/utils/config/index.js.test.cjs create mode 100644 test/lib/docs.js delete mode 100644 test/lib/utils/cmd-list.js delete mode 100644 test/lib/utils/config/describe-all.js delete mode 100644 test/lib/utils/config/flatten.js diff --git a/.github/workflows/ci-docs.yml b/.github/workflows/ci-npmcli-docs.yml similarity index 93% rename from .github/workflows/ci-docs.yml rename to .github/workflows/ci-npmcli-docs.yml index 842f26df9ecbe..acca296a26e76 100644 --- a/.github/workflows/ci-docs.yml +++ b/.github/workflows/ci-npmcli-docs.yml @@ -1,6 +1,6 @@ # This file is automatically added by @npmcli/template-oss. Do not edit. -name: CI - docs +name: CI - @npmcli/docs on: workflow_dispatch: @@ -71,9 +71,9 @@ jobs: - name: Reset Deps run: node . run resetdeps - name: Lint - run: node . run lint --ignore-scripts -w docs + run: node . run lint --ignore-scripts -w @npmcli/docs - name: Post Lint - run: node . run postlint --ignore-scripts -w docs + run: node . run postlint --ignore-scripts -w @npmcli/docs test: name: Test - ${{ matrix.platform.name }} - ${{ matrix.node-version }} @@ -114,7 +114,7 @@ jobs: - name: Add Problem Matcher run: echo "::add-matcher::.github/matchers/tap.json" - name: Test - run: node . test --ignore-scripts -w docs + run: node . test --ignore-scripts -w @npmcli/docs - name: Check Git Status if: matrix && matrix.platform.os != 'windows-latest' run: node scripts/git-dirty.js diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md index d1953a562a662..eecd5415aa6cf 100644 --- a/DEPENDENCIES.md +++ b/DEPENDENCIES.md @@ -117,6 +117,7 @@ graph LR; npm-->npmcli-arborist["@npmcli/arborist"]; npm-->npmcli-ci-detect["@npmcli/ci-detect"]; npm-->npmcli-config["@npmcli/config"]; + npm-->npmcli-docs["@npmcli/docs"]; npm-->npmcli-eslint-config["@npmcli/eslint-config"]; npm-->npmcli-fs["@npmcli/fs"]; npm-->npmcli-git["@npmcli/git"]; @@ -193,6 +194,10 @@ graph LR; npmcli-config-->proc-log; npmcli-config-->read-package-json-fast; npmcli-config-->semver; + npmcli-docs-->ignore-walk; + npmcli-docs-->npmcli-eslint-config["@npmcli/eslint-config"]; + npmcli-docs-->npmcli-fs["@npmcli/fs"]; + npmcli-docs-->npmcli-template-oss["@npmcli/template-oss"]; npmcli-fs-->semver; npmcli-git-->npm-pick-manifest; npmcli-git-->npmcli-promise-spawn["@npmcli/promise-spawn"]; @@ -388,19 +393,6 @@ graph LR; detab-->repeat-string; dezalgo-->asap; dezalgo-->wrappy; - docs-->cmark-gfm; - docs-->front-matter; - docs-->ignore-walk; - docs-->isaacs-string-locale-compare["@isaacs/string-locale-compare"]; - docs-->jsdom; - docs-->marked-man; - docs-->mdx-js-mdx["@mdx-js/mdx"]; - docs-->mkdirp; - docs-->npmcli-eslint-config["@npmcli/eslint-config"]; - docs-->npmcli-fs["@npmcli/fs"]; - docs-->npmcli-template-oss["@npmcli/template-oss"]; - docs-->tap; - docs-->yaml; domexception-->webidl-conversions; encoding-->iconv-lite; end-of-stream-->once; @@ -701,7 +693,6 @@ graph LR; npm-->cli-columns; npm-->cli-table3; npm-->columnify; - npm-->docs; npm-->fastest-levenshtein; npm-->fs-minipass; npm-->glob; @@ -745,6 +736,7 @@ graph LR; npm-->npmcli-arborist["@npmcli/arborist"]; npm-->npmcli-ci-detect["@npmcli/ci-detect"]; npm-->npmcli-config["@npmcli/config"]; + npm-->npmcli-docs["@npmcli/docs"]; npm-->npmcli-eslint-config["@npmcli/eslint-config"]; npm-->npmcli-fs["@npmcli/fs"]; npm-->npmcli-git["@npmcli/git"]; @@ -855,6 +847,19 @@ graph LR; npmcli-config-->semver; npmcli-config-->walk-up-path; npmcli-disparity-colors-->ansi-styles; + npmcli-docs-->cmark-gfm; + npmcli-docs-->front-matter; + npmcli-docs-->ignore-walk; + npmcli-docs-->isaacs-string-locale-compare["@isaacs/string-locale-compare"]; + npmcli-docs-->jsdom; + npmcli-docs-->marked-man; + npmcli-docs-->mdx-js-mdx["@mdx-js/mdx"]; + npmcli-docs-->mkdirp; + npmcli-docs-->npmcli-eslint-config["@npmcli/eslint-config"]; + npmcli-docs-->npmcli-fs["@npmcli/fs"]; + npmcli-docs-->npmcli-template-oss["@npmcli/template-oss"]; + npmcli-docs-->tap; + npmcli-docs-->yaml; npmcli-fs-->gar-promisify["@gar/promisify"]; npmcli-fs-->semver; npmcli-git-->lru-cache; @@ -1109,6 +1114,6 @@ packages higher up the chain. - pacote, libnpmaccess, libnpmhook, libnpmorg, libnpmsearch, libnpmteam, npm-profile - npm-registry-fetch, libnpmversion - @npmcli/git, make-fetch-happen, @npmcli/config, init-package-json - - @npmcli/installed-package-contents, @npmcli/map-workspaces, cacache, npm-pick-manifest, @npmcli/run-script, npm-packlist, read-package-json, @npmcli/query, readdir-scoped-modules, promzard - - npm-bundled, read-package-json-fast, @npmcli/fs, unique-filename, @npmcli/promise-spawn, npm-install-checks, npm-package-arg, normalize-package-data, @npmcli/package-json, bin-links, nopt, npmlog, parse-conflict-json, dezalgo, read - - npm-normalize-package-bin, @npmcli/name-from-folder, json-parse-even-better-errors, semver, @npmcli/move-file, fs-minipass, infer-owner, ssri, unique-slug, hosted-git-info, proc-log, validate-npm-package-name, @npmcli/node-gyp, ignore-walk, minipass-fetch, cmd-shim, read-cmd-shim, write-file-atomic, abbrev, are-we-there-yet, gauge, wrappy, treeverse, @npmcli/eslint-config, @npmcli/template-oss, minify-registry-metadata, @npmcli/disparity-colors, @npmcli/ci-detect, mute-stream, ini, npm-audit-report, npm-user-validate + - @npmcli/docs, @npmcli/installed-package-contents, @npmcli/map-workspaces, cacache, npm-pick-manifest, @npmcli/run-script, npm-packlist, read-package-json, @npmcli/query, readdir-scoped-modules, promzard + - @npmcli/fs, npm-bundled, read-package-json-fast, unique-filename, @npmcli/promise-spawn, npm-install-checks, npm-package-arg, normalize-package-data, @npmcli/package-json, bin-links, nopt, npmlog, parse-conflict-json, dezalgo, read + - semver, ignore-walk, @npmcli/eslint-config, @npmcli/template-oss, npm-normalize-package-bin, @npmcli/name-from-folder, json-parse-even-better-errors, @npmcli/move-file, fs-minipass, infer-owner, ssri, unique-slug, hosted-git-info, proc-log, validate-npm-package-name, @npmcli/node-gyp, minipass-fetch, cmd-shim, read-cmd-shim, write-file-atomic, abbrev, are-we-there-yet, gauge, wrappy, treeverse, minify-registry-metadata, @npmcli/disparity-colors, @npmcli/ci-detect, mute-stream, ini, npm-audit-report, npm-user-validate diff --git a/docs/package.json b/docs/package.json index e5e1798283e50..fb6f28428123f 100644 --- a/docs/package.json +++ b/docs/package.json @@ -1,5 +1,5 @@ { - "name": "docs", + "name": "@npmcli/docs", "description": "The npm cli documentation", "version": "1.0.0", "private": true, @@ -36,7 +36,7 @@ }, "devDependencies": { "@npmcli/eslint-config": "^3.1.0", - "@npmcli/template-oss": "4.5.1", + "@npmcli/template-oss": "4.7.1", "tap": "^16.0.1" }, "author": "GitHub Inc.", diff --git a/lib/commands/completion.js b/lib/commands/completion.js index c24fb050dcb34..7571a1442cf98 100644 --- a/lib/commands/completion.js +++ b/lib/commands/completion.js @@ -33,9 +33,9 @@ const fs = require('@npmcli/fs') const nopt = require('nopt') const { definitions, shorthands } = require('../utils/config/index.js') -const { aliases, cmdList, plumbing } = require('../utils/cmd-list.js') +const { aliases, commands, plumbing } = require('../utils/cmd-list.js') const aliasNames = Object.keys(aliases) -const fullList = cmdList.concat(aliasNames).filter(c => !plumbing.includes(c)) +const fullList = commands.concat(aliasNames).filter(c => !plumbing.includes(c)) const configNames = Object.keys(definitions) const shorthandNames = Object.keys(shorthands) const allConfs = configNames.concat(shorthandNames) diff --git a/lib/commands/publish.js b/lib/commands/publish.js index 3d17866a684a4..70602a0ac44d7 100644 --- a/lib/commands/publish.js +++ b/lib/commands/publish.js @@ -16,7 +16,7 @@ const { getContents, logTar } = require('../utils/tar.js') // keys that npm supports in .npmrc files and elsewhere. We *may* want to // revisit this at some point, and have a minimal set that's a SemVer-major // change that ought to get a RFC written on it. -const flatten = require('../utils/config/flatten.js') +const { flatten } = require('../utils/config/index.js') // this is the only case in the CLI where we want to use the old full slow // 'read-package-json' module, because we want to pull in all the defaults and diff --git a/lib/commands/unpublish.js b/lib/commands/unpublish.js index 0e5ef3dc5e91d..147df77d745ed 100644 --- a/lib/commands/unpublish.js +++ b/lib/commands/unpublish.js @@ -6,7 +6,7 @@ const path = require('path') const util = require('util') const readJson = util.promisify(require('read-package-json')) -const flatten = require('../utils/config/flatten.js') +const { flatten } = require('../utils/config/index.js') const getIdentity = require('../utils/get-identity.js') const log = require('../utils/log-shim') const otplease = require('../utils/otplease.js') diff --git a/lib/utils/cmd-list.js b/lib/utils/cmd-list.js index 38439542a21f9..a1f5ece66bed3 100644 --- a/lib/utils/cmd-list.js +++ b/lib/utils/cmd-list.js @@ -1,4 +1,5 @@ const abbrev = require('abbrev') +const localeCompare = require('@isaacs/string-locale-compare')('en') // plumbing should not have any aliases const aliases = { @@ -69,8 +70,7 @@ const aliases = { } // these are filenames in . -// Keep these sorted so that lib/utils/npm-usage.js outputs in order -const cmdList = [ +const commands = [ 'access', 'adduser', 'audit', @@ -141,11 +141,13 @@ const cmdList = [ ] const plumbing = ['birthday', 'help-search'] -const abbrevs = abbrev(cmdList.concat(Object.keys(aliases))) +const allCommands = [...commands, ...plumbing].sort(localeCompare) +const abbrevs = abbrev(commands.concat(Object.keys(aliases))) module.exports = { abbrevs, aliases, - cmdList, + commands, plumbing, + allCommands, } diff --git a/lib/utils/config/describe-all.js b/lib/utils/config/describe-all.js deleted file mode 100644 index 39f8d5fe4d453..0000000000000 --- a/lib/utils/config/describe-all.js +++ /dev/null @@ -1,20 +0,0 @@ -const definitions = require('./definitions.js') -const localeCompare = require('@isaacs/string-locale-compare')('en') -const describeAll = () => { - // sort not-deprecated ones to the top - /* istanbul ignore next - typically already sorted in the definitions file, - * but this is here so that our help doc will stay consistent if we decide - * to move them around. */ - const sort = ([keya, { deprecated: depa }], [keyb, { deprecated: depb }]) => { - return depa && !depb ? 1 - : !depa && depb ? -1 - : localeCompare(keya, keyb) - } - return Object.entries(definitions).sort(sort) - .map(([key, def]) => def.describe()) - .join( - '\n\n\n' + - '\n\n' - ) -} -module.exports = describeAll diff --git a/lib/utils/config/flatten.js b/lib/utils/config/flatten.js deleted file mode 100644 index 588d05bf0d77d..0000000000000 --- a/lib/utils/config/flatten.js +++ /dev/null @@ -1,33 +0,0 @@ -// use the defined flattening function, and copy over any scoped -// registries and registry-specific "nerfdart" configs verbatim -// -// TODO: make these getters so that we only have to make dirty -// the thing that changed, and then flatten the fields that -// could have changed when a config.set is called. -// -// TODO: move nerfdart auth stuff into a nested object that -// is only passed along to paths that end up calling npm-registry-fetch. -const definitions = require('./definitions.js') -const flatten = (obj, flat = {}) => { - for (const [key, val] of Object.entries(obj)) { - const def = definitions[key] - if (def && def.flatten) { - def.flatten(key, obj, flat) - } else if (/@.*:registry$/i.test(key) || /^\/\//.test(key)) { - flat[key] = val - } - } - - // XXX make this the bin/npm-cli.js file explicitly instead - // otherwise using npm programmatically is a bit of a pain. - flat.npmBin = require.main ? require.main.filename - : /* istanbul ignore next - not configurable property */ undefined - flat.nodeBin = process.env.NODE || process.execPath - - // XXX should this be sha512? is it even relevant? - flat.hashAlgorithm = 'sha1' - - return flat -} - -module.exports = flatten diff --git a/lib/utils/config/index.js b/lib/utils/config/index.js index b0ad24d7ee12f..d393aec2297d2 100644 --- a/lib/utils/config/index.js +++ b/lib/utils/config/index.js @@ -1,6 +1,35 @@ -const flatten = require('./flatten.js') const definitions = require('./definitions.js') -const describeAll = require('./describe-all.js') + +// use the defined flattening function, and copy over any scoped +// registries and registry-specific "nerfdart" configs verbatim +// +// TODO: make these getters so that we only have to make dirty +// the thing that changed, and then flatten the fields that +// could have changed when a config.set is called. +// +// TODO: move nerfdart auth stuff into a nested object that +// is only passed along to paths that end up calling npm-registry-fetch. +const flatten = (obj, flat = {}) => { + for (const [key, val] of Object.entries(obj)) { + const def = definitions[key] + if (def && def.flatten) { + def.flatten(key, obj, flat) + } else if (/@.*:registry$/i.test(key) || /^\/\//.test(key)) { + flat[key] = val + } + } + + // XXX make this the bin/npm-cli.js file explicitly instead + // otherwise using npm programmatically is a bit of a pain. + flat.npmBin = require.main ? require.main.filename + : /* istanbul ignore next - not configurable property */ undefined + flat.nodeBin = process.env.NODE || process.execPath + + // XXX should this be sha512? is it even relevant? + flat.hashAlgorithm = 'sha1' + + return flat +} // aliases where they get expanded into a completely different thing // these are NOT supported in the environment or npmrc files, only @@ -26,30 +55,24 @@ const shorthands = { readonly: ['--read-only'], reg: ['--registry'], iwr: ['--include-workspace-root'], -} - -for (const [key, { short }] of Object.entries(definitions)) { - if (!short) { - continue - } - // can be either an array or string - for (const s of [].concat(short)) { - shorthands[s] = [`--${key}`] - } + ...Object.entries(definitions).reduce((acc, [key, { short = [] }]) => { + // can be either an array or string + for (const s of [].concat(short)) { + acc[s] = [`--${key}`] + } + return acc + }, {}), } module.exports = { get defaults () { // NB: 'default' is a reserved word - return Object.entries(definitions).map(([key, { default: def }]) => { - return [key, def] - }).reduce((defaults, [key, def]) => { - defaults[key] = def - return defaults + return Object.entries(definitions).reduce((acc, [key, { default: d }]) => { + acc[key] = d + return acc }, {}) }, definitions, flatten, shorthands, - describeAll, } diff --git a/lib/utils/did-you-mean.js b/lib/utils/did-you-mean.js index b859abaaf5d23..10b33d5f83a08 100644 --- a/lib/utils/did-you-mean.js +++ b/lib/utils/did-you-mean.js @@ -1,10 +1,10 @@ const { distance } = require('fastest-levenshtein') const readJson = require('read-package-json-fast') -const { cmdList } = require('./cmd-list.js') +const { commands } = require('./cmd-list.js') const didYouMean = async (npm, path, scmd) => { // const cmd = await npm.cmd(str) - const close = cmdList.filter(cmd => distance(scmd, cmd) < scmd.length * 0.4 && scmd !== cmd) + const close = commands.filter(cmd => distance(scmd, cmd) < scmd.length * 0.4 && scmd !== cmd) let best = [] for (const str of close) { const cmd = await npm.cmd(str) diff --git a/lib/utils/npm-usage.js b/lib/utils/npm-usage.js index 431995ecf0bae..1eebc305ff396 100644 --- a/lib/utils/npm-usage.js +++ b/lib/utils/npm-usage.js @@ -1,5 +1,5 @@ const { dirname } = require('path') -const { cmdList } = require('./cmd-list') +const { commands } = require('./cmd-list') const localeCompare = require('@isaacs/string-locale-compare')('en') module.exports = async (npm) => { @@ -35,7 +35,7 @@ const allCommands = async (npm) => { if (npm.config.get('long')) { return usages(npm) } - return ('\n ' + wrap(cmdList)) + return ('\n ' + wrap(commands)) } const wrap = (arr) => { @@ -60,7 +60,7 @@ const usages = async (npm) => { // return a string of : let maxLen = 0 const set = [] - for (const c of cmdList) { + for (const c of commands) { const cmd = await npm.cmd(c) set.push([c, cmd.usage]) maxLen = Math.max(maxLen, c.length) diff --git a/package-lock.json b/package-lock.json index b106fb2f973db..a408722e9c829 100644 --- a/package-lock.json +++ b/package-lock.json @@ -168,6 +168,7 @@ "npx": "bin/npx-cli.js" }, "devDependencies": { + "@npmcli/docs": "^1.0.0", "@npmcli/eslint-config": "^3.1.0", "@npmcli/git": "^3.0.2", "@npmcli/promise-spawn": "^3.0.0", @@ -183,6 +184,7 @@ } }, "docs": { + "name": "@npmcli/docs", "version": "1.0.0", "license": "ISC", "dependencies": { @@ -199,62 +201,13 @@ }, "devDependencies": { "@npmcli/eslint-config": "^3.1.0", - "@npmcli/template-oss": "4.5.1", + "@npmcli/template-oss": "4.7.1", "tap": "^16.0.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "docs/node_modules/@npmcli/template-oss": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@npmcli/template-oss/-/template-oss-4.5.1.tgz", - "integrity": "sha512-tXnGq8StMs2lC4jqp80EzXkM8cq6WXq1BtHS9/RLjgxFzB2/bzJZBam2GAyebiRnTj0dMIeY975M6qZrcyxZzw==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@actions/core": "^1.9.1", - "@commitlint/cli": "^17.1.1", - "@commitlint/config-conventional": "^17.1.0", - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^2.0.1", - "@npmcli/git": "^3.0.0", - "@npmcli/map-workspaces": "^2.0.2", - "@npmcli/package-json": "^2.0.0", - "@octokit/rest": "^19.0.4", - "diff": "^5.0.0", - "glob": "^8.0.1", - "handlebars": "^4.7.7", - "hosted-git-info": "^5.0.0", - "json-parse-even-better-errors": "^2.3.1", - "just-deep-map-values": "^1.1.1", - "just-diff": "^5.0.1", - "lodash": "^4.17.21", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0", - "release-please": "npm:@npmcli/release-please@^14.2.6", - "semver": "^7.3.5", - "yaml": "^2.1.1" - }, - "bin": { - "template-oss-apply": "bin/apply.js", - "template-oss-check": "bin/check.js", - "template-oss-release-manager": "bin/release-manager.js", - "template-oss-release-please": "bin/release-please.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "docs/node_modules/@npmcli/template-oss/node_modules/yaml": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz", - "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, "docs/node_modules/ignore-walk": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", @@ -2163,6 +2116,10 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/@npmcli/docs": { + "resolved": "docs", + "link": true + }, "node_modules/@npmcli/eslint-config": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@npmcli/eslint-config/-/eslint-config-3.1.0.tgz", @@ -4343,10 +4300,6 @@ "node": ">=0.10.0" } }, - "node_modules/docs": { - "resolved": "docs", - "link": true - }, "node_modules/doctrine": { "version": "3.0.0", "dev": true, diff --git a/package.json b/package.json index 8f0dcad2ca463..3c4ee7decff03 100644 --- a/package.json +++ b/package.json @@ -205,6 +205,7 @@ "write-file-atomic" ], "devDependencies": { + "@npmcli/docs": "^1.0.0", "@npmcli/eslint-config": "^3.1.0", "@npmcli/git": "^3.0.2", "@npmcli/promise-spawn": "^3.0.0", diff --git a/tap-snapshots/test/lib/docs.js.test.cjs b/tap-snapshots/test/lib/docs.js.test.cjs new file mode 100644 index 0000000000000..1f4a8dae1de34 --- /dev/null +++ b/tap-snapshots/test/lib/docs.js.test.cjs @@ -0,0 +1,4321 @@ +/* IMPORTANT + * This snapshot file is auto-generated, but designed for humans. + * It should be checked into source control and tracked carefully. + * Re-generate by setting TAP_SNAPSHOT=1 and running tests. + * Make sure to inspect the output below. Do not ignore changes! + */ +'use strict' +exports[`test/lib/docs.js TAP basic usage > must match snapshot 1`] = ` +npm + +Usage: + +npm install install all the dependencies in your project +npm install add the dependency to your project +npm test run this project's tests +npm run run the script named +npm -h quick help on +npm -l display usage info for all commands +npm help search for help on +npm help npm more involved overview + +All commands: + + + +Specify configs in the ini-formatted file: + /some/config/file/.npmrc +or on the command line via: npm --key=value + +More configuration info: npm help config +Configuration fields: npm help 7 config + +npm@{VERSION} {BASEDIR} +` + +exports[`test/lib/docs.js TAP command list > abbrevs 1`] = ` +Object { + "ac": "access", + "acc": "access", + "acce": "access", + "acces": "access", + "access": "access", + "add": "add", + "add-": "add-user", + "add-u": "add-user", + "add-us": "add-user", + "add-use": "add-user", + "add-user": "add-user", + "addu": "adduser", + "addus": "adduser", + "adduse": "adduser", + "adduser": "adduser", + "aud": "audit", + "audi": "audit", + "audit": "audit", + "aut": "author", + "auth": "author", + "autho": "author", + "author": "author", + "bi": "bin", + "bin": "bin", + "bu": "bugs", + "bug": "bugs", + "bugs": "bugs", + "c": "c", + "ca": "cache", + "cac": "cache", + "cach": "cache", + "cache": "cache", + "ci": "ci", + "cit": "cit", + "clean-install": "clean-install", + "clean-install-": "clean-install-test", + "clean-install-t": "clean-install-test", + "clean-install-te": "clean-install-test", + "clean-install-tes": "clean-install-test", + "clean-install-test": "clean-install-test", + "com": "completion", + "comp": "completion", + "compl": "completion", + "comple": "completion", + "complet": "completion", + "completi": "completion", + "completio": "completion", + "completion": "completion", + "con": "config", + "conf": "config", + "confi": "config", + "config": "config", + "cr": "create", + "cre": "create", + "crea": "create", + "creat": "create", + "create": "create", + "dd": "ddp", + "ddp": "ddp", + "ded": "dedupe", + "dedu": "dedupe", + "dedup": "dedupe", + "dedupe": "dedupe", + "dep": "deprecate", + "depr": "deprecate", + "depre": "deprecate", + "deprec": "deprecate", + "depreca": "deprecate", + "deprecat": "deprecate", + "deprecate": "deprecate", + "dif": "diff", + "diff": "diff", + "dist-tag": "dist-tag", + "dist-tags": "dist-tags", + "docs": "docs", + "doct": "doctor", + "docto": "doctor", + "doctor": "doctor", + "ed": "edit", + "edi": "edit", + "edit": "edit", + "exe": "exec", + "exec": "exec", + "expla": "explain", + "explai": "explain", + "explain": "explain", + "explo": "explore", + "explor": "explore", + "explore": "explore", + "find": "find", + "find-": "find-dupes", + "find-d": "find-dupes", + "find-du": "find-dupes", + "find-dup": "find-dupes", + "find-dupe": "find-dupes", + "find-dupes": "find-dupes", + "fu": "fund", + "fun": "fund", + "fund": "fund", + "g": "get", + "ge": "get", + "get": "get", + "he": "help", + "hel": "help", + "help": "help", + "hl": "hlep", + "hle": "hlep", + "hlep": "hlep", + "hom": "home", + "home": "home", + "hoo": "hook", + "hook": "hook", + "i": "i", + "ic": "ic", + "in": "in", + "inf": "info", + "info": "info", + "ini": "init", + "init": "init", + "inn": "innit", + "inni": "innit", + "innit": "innit", + "ins": "ins", + "inst": "inst", + "insta": "insta", + "instal": "instal", + "install": "install", + "install-ci": "install-ci-test", + "install-ci-": "install-ci-test", + "install-ci-t": "install-ci-test", + "install-ci-te": "install-ci-test", + "install-ci-tes": "install-ci-test", + "install-ci-test": "install-ci-test", + "install-cl": "install-clean", + "install-cle": "install-clean", + "install-clea": "install-clean", + "install-clean": "install-clean", + "install-t": "install-test", + "install-te": "install-test", + "install-tes": "install-test", + "install-test": "install-test", + "isnt": "isnt", + "isnta": "isnta", + "isntal": "isntal", + "isntall": "isntall", + "isntall-": "isntall-clean", + "isntall-c": "isntall-clean", + "isntall-cl": "isntall-clean", + "isntall-cle": "isntall-clean", + "isntall-clea": "isntall-clean", + "isntall-clean": "isntall-clean", + "iss": "issues", + "issu": "issues", + "issue": "issues", + "issues": "issues", + "it": "it", + "la": "la", + "lin": "link", + "link": "link", + "lis": "list", + "list": "list", + "ll": "ll", + "ln": "ln", + "logi": "login", + "login": "login", + "logo": "logout", + "logou": "logout", + "logout": "logout", + "ls": "ls", + "og": "ogr", + "ogr": "ogr", + "or": "org", + "org": "org", + "ou": "outdated", + "out": "outdated", + "outd": "outdated", + "outda": "outdated", + "outdat": "outdated", + "outdate": "outdated", + "outdated": "outdated", + "ow": "owner", + "own": "owner", + "owne": "owner", + "owner": "owner", + "pa": "pack", + "pac": "pack", + "pack": "pack", + "pi": "ping", + "pin": "ping", + "ping": "ping", + "pk": "pkg", + "pkg": "pkg", + "pre": "prefix", + "pref": "prefix", + "prefi": "prefix", + "prefix": "prefix", + "pro": "profile", + "prof": "profile", + "profi": "profile", + "profil": "profile", + "profile": "profile", + "pru": "prune", + "prun": "prune", + "prune": "prune", + "pu": "publish", + "pub": "publish", + "publ": "publish", + "publi": "publish", + "publis": "publish", + "publish": "publish", + "q": "query", + "qu": "query", + "que": "query", + "quer": "query", + "query": "query", + "r": "r", + "rb": "rb", + "reb": "rebuild", + "rebu": "rebuild", + "rebui": "rebuild", + "rebuil": "rebuild", + "rebuild": "rebuild", + "rem": "remove", + "remo": "remove", + "remov": "remove", + "remove": "remove", + "rep": "repo", + "repo": "repo", + "res": "restart", + "rest": "restart", + "resta": "restart", + "restar": "restart", + "restart": "restart", + "rm": "rm", + "ro": "root", + "roo": "root", + "root": "root", + "rum": "rum", + "run": "run", + "run-": "run-script", + "run-s": "run-script", + "run-sc": "run-script", + "run-scr": "run-script", + "run-scri": "run-script", + "run-scrip": "run-script", + "run-script": "run-script", + "s": "s", + "se": "se", + "sea": "search", + "sear": "search", + "searc": "search", + "search": "search", + "set": "set", + "set-": "set-script", + "set-s": "set-script", + "set-sc": "set-script", + "set-scr": "set-script", + "set-scri": "set-script", + "set-scrip": "set-script", + "set-script": "set-script", + "sho": "show", + "show": "show", + "shr": "shrinkwrap", + "shri": "shrinkwrap", + "shrin": "shrinkwrap", + "shrink": "shrinkwrap", + "shrinkw": "shrinkwrap", + "shrinkwr": "shrinkwrap", + "shrinkwra": "shrinkwrap", + "shrinkwrap": "shrinkwrap", + "si": "sit", + "sit": "sit", + "star": "star", + "stars": "stars", + "start": "start", + "sto": "stop", + "stop": "stop", + "t": "t", + "tea": "team", + "team": "team", + "tes": "test", + "test": "test", + "to": "token", + "tok": "token", + "toke": "token", + "token": "token", + "ts": "tst", + "tst": "tst", + "ud": "udpate", + "udp": "udpate", + "udpa": "udpate", + "udpat": "udpate", + "udpate": "udpate", + "un": "un", + "uni": "uninstall", + "unin": "uninstall", + "unins": "uninstall", + "uninst": "uninstall", + "uninsta": "uninstall", + "uninstal": "uninstall", + "uninstall": "uninstall", + "unl": "unlink", + "unli": "unlink", + "unlin": "unlink", + "unlink": "unlink", + "unp": "unpublish", + "unpu": "unpublish", + "unpub": "unpublish", + "unpubl": "unpublish", + "unpubli": "unpublish", + "unpublis": "unpublish", + "unpublish": "unpublish", + "uns": "unstar", + "unst": "unstar", + "unsta": "unstar", + "unstar": "unstar", + "up": "up", + "upd": "update", + "upda": "update", + "updat": "update", + "update": "update", + "upg": "upgrade", + "upgr": "upgrade", + "upgra": "upgrade", + "upgrad": "upgrade", + "upgrade": "upgrade", + "ur": "urn", + "urn": "urn", + "v": "v", + "veri": "verison", + "veris": "verison", + "veriso": "verison", + "verison": "verison", + "vers": "version", + "versi": "version", + "versio": "version", + "version": "version", + "vi": "view", + "vie": "view", + "view": "view", + "who": "whoami", + "whoa": "whoami", + "whoam": "whoami", + "whoami": "whoami", + "why": "why", + "x": "x", +} +` + +exports[`test/lib/docs.js TAP command list > aliases 1`] = ` +Object { + "add": "install", + "add-user": "adduser", + "author": "owner", + "c": "config", + "cit": "install-ci-test", + "clean-install": "ci", + "clean-install-test": "cit", + "create": "init", + "ddp": "dedupe", + "dist-tags": "dist-tag", + "find": "search", + "hlep": "help", + "home": "docs", + "i": "install", + "ic": "ci", + "in": "install", + "info": "view", + "innit": "init", + "ins": "install", + "inst": "install", + "insta": "install", + "instal": "install", + "install-clean": "ci", + "isnt": "install", + "isnta": "install", + "isntal": "install", + "isntall": "install", + "isntall-clean": "ci", + "issues": "bugs", + "it": "install-test", + "la": "ll", + "list": "ls", + "ln": "link", + "login": "adduser", + "ogr": "org", + "r": "uninstall", + "rb": "rebuild", + "remove": "uninstall", + "rm": "uninstall", + "rum": "run-script", + "run": "run-script", + "s": "search", + "se": "search", + "show": "view", + "sit": "cit", + "t": "test", + "tst": "test", + "udpate": "update", + "un": "uninstall", + "unlink": "uninstall", + "up": "update", + "upgrade": "update", + "urn": "run-script", + "v": "view", + "verison": "version", + "why": "explain", + "x": "exec", +} +` + +exports[`test/lib/docs.js TAP command list > allCommands 1`] = ` +Array [ + "access", + "adduser", + "audit", + "bin", + "birthday", + "bugs", + "cache", + "ci", + "completion", + "config", + "dedupe", + "deprecate", + "diff", + "dist-tag", + "docs", + "doctor", + "edit", + "exec", + "explain", + "explore", + "find-dupes", + "fund", + "get", + "help", + "help-search", + "hook", + "init", + "install", + "install-ci-test", + "install-test", + "link", + "ll", + "login", + "logout", + "ls", + "org", + "outdated", + "owner", + "pack", + "ping", + "pkg", + "prefix", + "profile", + "prune", + "publish", + "query", + "rebuild", + "repo", + "restart", + "root", + "run-script", + "search", + "set", + "set-script", + "shrinkwrap", + "star", + "stars", + "start", + "stop", + "team", + "test", + "token", + "uninstall", + "unpublish", + "unstar", + "update", + "version", + "view", + "whoami", +] +` + +exports[`test/lib/docs.js TAP command list > commands 1`] = ` +Array [ + "access", + "adduser", + "audit", + "bin", + "bugs", + "cache", + "ci", + "completion", + "config", + "dedupe", + "deprecate", + "diff", + "dist-tag", + "docs", + "doctor", + "edit", + "exec", + "explain", + "explore", + "find-dupes", + "fund", + "get", + "help", + "hook", + "init", + "install", + "install-ci-test", + "install-test", + "link", + "ll", + "login", + "logout", + "ls", + "org", + "outdated", + "owner", + "pack", + "ping", + "pkg", + "prefix", + "profile", + "prune", + "publish", + "query", + "rebuild", + "repo", + "restart", + "root", + "run-script", + "search", + "set", + "set-script", + "shrinkwrap", + "star", + "stars", + "start", + "stop", + "team", + "test", + "token", + "uninstall", + "unpublish", + "unstar", + "update", + "version", + "view", + "whoami", +] +` + +exports[`test/lib/docs.js TAP command list > plumbing 1`] = ` +Array [ + "birthday", + "help-search", +] +` + +exports[`test/lib/docs.js TAP config > all definitions 1`] = ` +#### \`_auth\` + +* Default: null +* Type: null or String + +A basic-auth string to use when authenticating against the npm registry. +This will ONLY be used to authenticate against the npm registry. For other +registries you will need to scope it like "//other-registry.tld/:_auth" + +Warning: This should generally not be set via a command-line option. It is +safer to use a registry-provided authentication bearer token stored in the +~/.npmrc file by running \`npm login\`. + +#### \`access\` + +* Default: 'restricted' for scoped packages, 'public' for unscoped packages +* Type: null, "restricted", or "public" + +When publishing scoped packages, the access level defaults to \`restricted\`. +If you want your scoped package to be publicly viewable (and installable) +set \`--access=public\`. The only valid values for \`access\` are \`public\` and +\`restricted\`. Unscoped packages _always_ have an access level of \`public\`. + +Note: Using the \`--access\` flag on the \`npm publish\` command will only set +the package access level on the initial publish of the package. Any +subsequent \`npm publish\` commands using the \`--access\` flag will not have an +effect to the access level. To make changes to the access level after the +initial publish use \`npm access\`. + +#### \`all\` + +* Default: false +* Type: Boolean + +When running \`npm outdated\` and \`npm ls\`, setting \`--all\` will show all +outdated or installed packages, rather than only those directly depended +upon by the current project. + +#### \`allow-same-version\` + +* Default: false +* Type: Boolean + +Prevents throwing an error when \`npm version\` is used to set the new version +to the same value as the current version. + +#### \`audit\` + +* Default: true +* Type: Boolean + +When "true" submit audit reports alongside the current npm command to the +default registry and all registries configured for scopes. See the +documentation for [\`npm audit\`](/commands/npm-audit) for details on what is +submitted. + +#### \`audit-level\` + +* Default: null +* Type: null, "info", "low", "moderate", "high", "critical", or "none" + +The minimum level of vulnerability for \`npm audit\` to exit with a non-zero +exit code. + +#### \`auth-type\` + +* Default: "legacy" +* Type: "legacy", "web", "sso", "saml", "oauth", or "webauthn" + +NOTE: auth-type values "sso", "saml", "oauth", and "webauthn" will be +removed in a future version. + +What authentication strategy to use with \`login\`. + +#### \`before\` + +* Default: null +* Type: null or Date + +If passed to \`npm install\`, will rebuild the npm tree such that only +versions that were available **on or before** the \`--before\` time get +installed. If there's no versions available for the current set of direct +dependencies, the command will error. + +If the requested version is a \`dist-tag\` and the given tag does not pass the +\`--before\` filter, the most recent version less than or equal to that tag +will be used. For example, \`foo@latest\` might install \`foo@1.2\` even though +\`latest\` is \`2.0\`. + +#### \`bin-links\` + +* Default: true +* Type: Boolean + +Tells npm to create symlinks (or \`.cmd\` shims on Windows) for package +executables. + +Set to false to have it not do this. This can be used to work around the +fact that some file systems don't support symlinks, even on ostensibly Unix +systems. + +#### \`browser\` + +* Default: OS X: \`"open"\`, Windows: \`"start"\`, Others: \`"xdg-open"\` +* Type: null, Boolean, or String + +The browser that is called by npm commands to open websites. + +Set to \`false\` to suppress browser behavior and instead print urls to +terminal. + +Set to \`true\` to use default system URL opener. + +#### \`ca\` + +* Default: null +* Type: null or String (can be set multiple times) + +The Certificate Authority signing certificate that is trusted for SSL +connections to the registry. Values should be in PEM format (Windows calls +it "Base-64 encoded X.509 (.CER)") with newlines replaced by the string +"\\n". For example: + +\`\`\`ini +ca="-----BEGIN CERTIFICATE-----\\nXXXX\\nXXXX\\n-----END CERTIFICATE-----" +\`\`\` + +Set to \`null\` to only allow "known" registrars, or to a specific CA cert to +trust only that specific signing authority. + +Multiple CAs can be trusted by specifying an array of certificates: + +\`\`\`ini +ca[]="..." +ca[]="..." +\`\`\` + +See also the \`strict-ssl\` config. + +#### \`cache\` + +* Default: Windows: \`%LocalAppData%\\npm-cache\`, Posix: \`~/.npm\` +* Type: Path + +The location of npm's cache directory. See [\`npm +cache\`](/commands/npm-cache) + +#### \`cafile\` + +* Default: null +* Type: Path + +A path to a file containing one or multiple Certificate Authority signing +certificates. Similar to the \`ca\` setting, but allows for multiple CA's, as +well as for the CA information to be stored in a file on disk. + +#### \`call\` + +* Default: "" +* Type: String + +Optional companion option for \`npm exec\`, \`npx\` that allows for specifying a +custom command to be run along with the installed packages. + +\`\`\`bash +npm exec --package yo --package generator-node --call "yo node" +\`\`\` + + +#### \`cert\` + +* Default: null +* Type: null or String + +A client certificate to pass when accessing the registry. Values should be +in PEM format (Windows calls it "Base-64 encoded X.509 (.CER)") with +newlines replaced by the string "\\n". For example: + +\`\`\`ini +cert="-----BEGIN CERTIFICATE-----\\nXXXX\\nXXXX\\n-----END CERTIFICATE-----" +\`\`\` + +It is _not_ the path to a certificate file, though you can set a +registry-scoped "certfile" path like +"//other-registry.tld/:certfile=/path/to/cert.pem". + +#### \`ci-name\` + +* Default: The name of the current CI system, or \`null\` when not on a known CI + platform. +* Type: null or String + +The name of a continuous integration system. If not set explicitly, npm will +detect the current CI environment using the +[\`@npmcli/ci-detect\`](http://npm.im/@npmcli/ci-detect) module. + +#### \`cidr\` + +* Default: null +* Type: null or String (can be set multiple times) + +This is a list of CIDR address to be used when configuring limited access +tokens with the \`npm token create\` command. + +#### \`color\` + +* Default: true unless the NO_COLOR environ is set to something other than '0' +* Type: "always" or Boolean + +If false, never shows colors. If \`"always"\` then always shows colors. If +true, then only prints color codes for tty file descriptors. + +#### \`commit-hooks\` + +* Default: true +* Type: Boolean + +Run git commit hooks when using the \`npm version\` command. + +#### \`depth\` + +* Default: \`Infinity\` if \`--all\` is set, otherwise \`1\` +* Type: null or Number + +The depth to go when recursing packages for \`npm ls\`. + +If not set, \`npm ls\` will show only the immediate dependencies of the root +project. If \`--all\` is set, then npm will show all dependencies by default. + +#### \`description\` + +* Default: true +* Type: Boolean + +Show the description in \`npm search\` + +#### \`diff\` + +* Default: +* Type: String (can be set multiple times) + +Define arguments to compare in \`npm diff\`. + +#### \`diff-dst-prefix\` + +* Default: "b/" +* Type: String + +Destination prefix to be used in \`npm diff\` output. + +#### \`diff-ignore-all-space\` + +* Default: false +* Type: Boolean + +Ignore whitespace when comparing lines in \`npm diff\`. + +#### \`diff-name-only\` + +* Default: false +* Type: Boolean + +Prints only filenames when using \`npm diff\`. + +#### \`diff-no-prefix\` + +* Default: false +* Type: Boolean + +Do not show any source or destination prefix in \`npm diff\` output. + +Note: this causes \`npm diff\` to ignore the \`--diff-src-prefix\` and +\`--diff-dst-prefix\` configs. + +#### \`diff-src-prefix\` + +* Default: "a/" +* Type: String + +Source prefix to be used in \`npm diff\` output. + +#### \`diff-text\` + +* Default: false +* Type: Boolean + +Treat all files as text in \`npm diff\`. + +#### \`diff-unified\` + +* Default: 3 +* Type: Number + +The number of lines of context to print in \`npm diff\`. + +#### \`dry-run\` + +* Default: false +* Type: Boolean + +Indicates that you don't want npm to make any changes and that it should +only report what it would have done. This can be passed into any of the +commands that modify your local installation, eg, \`install\`, \`update\`, +\`dedupe\`, \`uninstall\`, as well as \`pack\` and \`publish\`. + +Note: This is NOT honored by other network related commands, eg \`dist-tags\`, +\`owner\`, etc. + +#### \`editor\` + +* Default: The EDITOR or VISUAL environment variables, or 'notepad.exe' on + Windows, or 'vim' on Unix systems +* Type: String + +The command to run for \`npm edit\` and \`npm config edit\`. + +#### \`engine-strict\` + +* Default: false +* Type: Boolean + +If set to true, then npm will stubbornly refuse to install (or even consider +installing) any package that claims to not be compatible with the current +Node.js version. + +This can be overridden by setting the \`--force\` flag. + +#### \`fetch-retries\` + +* Default: 2 +* Type: Number + +The "retries" config for the \`retry\` module to use when fetching packages +from the registry. + +npm will retry idempotent read requests to the registry in the case of +network failures or 5xx HTTP errors. + +#### \`fetch-retry-factor\` + +* Default: 10 +* Type: Number + +The "factor" config for the \`retry\` module to use when fetching packages. + +#### \`fetch-retry-maxtimeout\` + +* Default: 60000 (1 minute) +* Type: Number + +The "maxTimeout" config for the \`retry\` module to use when fetching +packages. + +#### \`fetch-retry-mintimeout\` + +* Default: 10000 (10 seconds) +* Type: Number + +The "minTimeout" config for the \`retry\` module to use when fetching +packages. + +#### \`fetch-timeout\` + +* Default: 300000 (5 minutes) +* Type: Number + +The maximum amount of time to wait for HTTP requests to complete. + +#### \`force\` + +* Default: false +* Type: Boolean + +Removes various protections against unfortunate side effects, common +mistakes, unnecessary performance degradation, and malicious input. + +* Allow clobbering non-npm files in global installs. +* Allow the \`npm version\` command to work on an unclean git repository. +* Allow deleting the cache folder with \`npm cache clean\`. +* Allow installing packages that have an \`engines\` declaration requiring a + different version of npm. +* Allow installing packages that have an \`engines\` declaration requiring a + different version of \`node\`, even if \`--engine-strict\` is enabled. +* Allow \`npm audit fix\` to install modules outside your stated dependency + range (including SemVer-major changes). +* Allow unpublishing all versions of a published package. +* Allow conflicting peerDependencies to be installed in the root project. +* Implicitly set \`--yes\` during \`npm init\`. +* Allow clobbering existing values in \`npm pkg\` +* Allow unpublishing of entire packages (not just a single version). + +If you don't have a clear idea of what you want to do, it is strongly +recommended that you do not use this option! + +#### \`foreground-scripts\` + +* Default: false +* Type: Boolean + +Run all build scripts (ie, \`preinstall\`, \`install\`, and \`postinstall\`) +scripts for installed packages in the foreground process, sharing standard +input, output, and error with the main npm process. + +Note that this will generally make installs run slower, and be much noisier, +but can be useful for debugging. + +#### \`format-package-lock\` + +* Default: true +* Type: Boolean + +Format \`package-lock.json\` or \`npm-shrinkwrap.json\` as a human readable +file. + +#### \`fund\` + +* Default: true +* Type: Boolean + +When "true" displays the message at the end of each \`npm install\` +acknowledging the number of dependencies looking for funding. See [\`npm +fund\`](/commands/npm-fund) for details. + +#### \`git\` + +* Default: "git" +* Type: String + +The command to use for git commands. If git is installed on the computer, +but is not in the \`PATH\`, then set this to the full path to the git binary. + +#### \`git-tag-version\` + +* Default: true +* Type: Boolean + +Tag the commit when using the \`npm version\` command. Setting this to false +results in no commit being made at all. + +#### \`global\` + +* Default: false +* Type: Boolean + +Operates in "global" mode, so that packages are installed into the \`prefix\` +folder instead of the current working directory. See +[folders](/configuring-npm/folders) for more on the differences in behavior. + +* packages are installed into the \`{prefix}/lib/node_modules\` folder, instead + of the current working directory. +* bin files are linked to \`{prefix}/bin\` +* man pages are linked to \`{prefix}/share/man\` + +#### \`global-style\` + +* Default: false +* Type: Boolean + +Causes npm to install the package into your local \`node_modules\` folder with +the same layout it uses with the global \`node_modules\` folder. Only your +direct dependencies will show in \`node_modules\` and everything they depend +on will be flattened in their \`node_modules\` folders. This obviously will +eliminate some deduping. If used with \`legacy-bundling\`, \`legacy-bundling\` +will be preferred. + +#### \`globalconfig\` + +* Default: The global --prefix setting plus 'etc/npmrc'. For example, + '/usr/local/etc/npmrc' +* Type: Path + +The config file to read for global config options. + +#### \`heading\` + +* Default: "npm" +* Type: String + +The string that starts all the debugging log output. + +#### \`https-proxy\` + +* Default: null +* Type: null or URL + +A proxy to use for outgoing https requests. If the \`HTTPS_PROXY\` or +\`https_proxy\` or \`HTTP_PROXY\` or \`http_proxy\` environment variables are set, +proxy settings will be honored by the underlying \`make-fetch-happen\` +library. + +#### \`if-present\` + +* Default: false +* Type: Boolean + +If true, npm will not exit with an error code when \`run-script\` is invoked +for a script that isn't defined in the \`scripts\` section of \`package.json\`. +This option can be used when it's desirable to optionally run a script when +it's present and fail if the script fails. This is useful, for example, when +running scripts that may only apply for some builds in an otherwise generic +CI setup. + +This value is not exported to the environment for child processes. + +#### \`ignore-scripts\` + +* Default: false +* Type: Boolean + +If true, npm does not run scripts specified in package.json files. + +Note that commands explicitly intended to run a particular script, such as +\`npm start\`, \`npm stop\`, \`npm restart\`, \`npm test\`, and \`npm run-script\` +will still run their intended script if \`ignore-scripts\` is set, but they +will *not* run any pre- or post-scripts. + +#### \`include\` + +* Default: +* Type: "prod", "dev", "optional", or "peer" (can be set multiple times) + +Option that allows for defining which types of dependencies to install. + +This is the inverse of \`--omit=\`. + +Dependency types specified in \`--include\` will not be omitted, regardless of +the order in which omit/include are specified on the command-line. + +#### \`include-staged\` + +* Default: false +* Type: Boolean + +Allow installing "staged" published packages, as defined by [npm RFC PR +#92](https://github.com/npm/rfcs/pull/92). + +This is experimental, and not implemented by the npm public registry. + +#### \`include-workspace-root\` + +* Default: false +* Type: Boolean + +Include the workspace root when workspaces are enabled for a command. + +When false, specifying individual workspaces via the \`workspace\` config, or +all workspaces via the \`workspaces\` flag, will cause npm to operate only on +the specified workspaces, and not on the root project. + +This value is not exported to the environment for child processes. + +#### \`init-author-email\` + +* Default: "" +* Type: String + +The value \`npm init\` should use by default for the package author's email. + +#### \`init-author-name\` + +* Default: "" +* Type: String + +The value \`npm init\` should use by default for the package author's name. + +#### \`init-author-url\` + +* Default: "" +* Type: "" or URL + +The value \`npm init\` should use by default for the package author's +homepage. + +#### \`init-license\` + +* Default: "ISC" +* Type: String + +The value \`npm init\` should use by default for the package license. + +#### \`init-module\` + +* Default: "~/.npm-init.js" +* Type: Path + +A module that will be loaded by the \`npm init\` command. See the +documentation for the +[init-package-json](https://github.com/npm/init-package-json) module for +more information, or [npm init](/commands/npm-init). + +#### \`init-version\` + +* Default: "1.0.0" +* Type: SemVer string + +The value that \`npm init\` should use by default for the package version +number, if not already set in package.json. + +#### \`install-links\` + +* Default: false +* Type: Boolean + +When set file: protocol dependencies that exist outside of the project root +will be packed and installed as regular dependencies instead of creating a +symlink. This option has no effect on workspaces. + +#### \`json\` + +* Default: false +* Type: Boolean + +Whether or not to output JSON data, rather than the normal output. + +* In \`npm pkg set\` it enables parsing set values with JSON.parse() before + saving them to your \`package.json\`. + +Not supported by all npm commands. + +#### \`key\` + +* Default: null +* Type: null or String + +A client key to pass when accessing the registry. Values should be in PEM +format with newlines replaced by the string "\\n". For example: + +\`\`\`ini +key="-----BEGIN PRIVATE KEY-----\\nXXXX\\nXXXX\\n-----END PRIVATE KEY-----" +\`\`\` + +It is _not_ the path to a key file, though you can set a registry-scoped +"keyfile" path like "//other-registry.tld/:keyfile=/path/to/key.pem". + +#### \`legacy-bundling\` + +* Default: false +* Type: Boolean + +Causes npm to install the package such that versions of npm prior to 1.4, +such as the one included with node 0.8, can install the package. This +eliminates all automatic deduping. If used with \`global-style\` this option +will be preferred. + +#### \`legacy-peer-deps\` + +* Default: false +* Type: Boolean + +Causes npm to completely ignore \`peerDependencies\` when building a package +tree, as in npm versions 3 through 6. + +If a package cannot be installed because of overly strict \`peerDependencies\` +that collide, it provides a way to move forward resolving the situation. + +This differs from \`--omit=peer\`, in that \`--omit=peer\` will avoid unpacking +\`peerDependencies\` on disk, but will still design a tree such that +\`peerDependencies\` _could_ be unpacked in a correct place. + +Use of \`legacy-peer-deps\` is not recommended, as it will not enforce the +\`peerDependencies\` contract that meta-dependencies may rely on. + +#### \`link\` + +* Default: false +* Type: Boolean + +Used with \`npm ls\`, limiting output to only those packages that are linked. + +#### \`local-address\` + +* Default: null +* Type: IP Address + +The IP address of the local interface to use when making connections to the +npm registry. Must be IPv4 in versions of Node prior to 0.12. + +#### \`location\` + +* Default: "user" unless \`--global\` is passed, which will also set this value + to "global" +* Type: "global", "user", or "project" + +When passed to \`npm config\` this refers to which config file to use. + +When set to "global" mode, packages are installed into the \`prefix\` folder +instead of the current working directory. See +[folders](/configuring-npm/folders) for more on the differences in behavior. + +* packages are installed into the \`{prefix}/lib/node_modules\` folder, instead + of the current working directory. +* bin files are linked to \`{prefix}/bin\` +* man pages are linked to \`{prefix}/share/man\` + +#### \`lockfile-version\` + +* Default: Version 2 if no lockfile or current lockfile version less than or + equal to 2, otherwise maintain current lockfile version +* Type: null, 1, 2, 3, "1", "2", or "3" + +Set the lockfile format version to be used in package-lock.json and +npm-shrinkwrap-json files. Possible options are: + +1: The lockfile version used by npm versions 5 and 6. Lacks some data that +is used during the install, resulting in slower and possibly less +deterministic installs. Prevents lockfile churn when interoperating with +older npm versions. + +2: The default lockfile version used by npm version 7. Includes both the +version 1 lockfile data and version 3 lockfile data, for maximum determinism +and interoperability, at the expense of more bytes on disk. + +3: Only the new lockfile information introduced in npm version 7. Smaller on +disk than lockfile version 2, but not interoperable with older npm versions. +Ideal if all users are on npm version 7 and higher. + +#### \`loglevel\` + +* Default: "notice" +* Type: "silent", "error", "warn", "notice", "http", "timing", "info", + "verbose", or "silly" + +What level of logs to report. All logs are written to a debug log, with the +path to that file printed if the execution of a command fails. + +Any logs of a higher level than the setting are shown. The default is +"notice". + +See also the \`foreground-scripts\` config. + +#### \`logs-dir\` + +* Default: A directory named \`_logs\` inside the cache +* Type: null or Path + +The location of npm's log directory. See [\`npm logging\`](/using-npm/logging) +for more information. + +#### \`logs-max\` + +* Default: 10 +* Type: Number + +The maximum number of log files to store. + +If set to 0, no log files will be written for the current run. + +#### \`long\` + +* Default: false +* Type: Boolean + +Show extended information in \`ls\`, \`search\`, and \`help-search\`. + +#### \`maxsockets\` + +* Default: 15 +* Type: Number + +The maximum number of connections to use per origin (protocol/host/port +combination). + +#### \`message\` + +* Default: "%s" +* Type: String + +Commit message which is used by \`npm version\` when creating version commit. + +Any "%s" in the message will be replaced with the version number. + +#### \`node-options\` + +* Default: null +* Type: null or String + +Options to pass through to Node.js via the \`NODE_OPTIONS\` environment +variable. This does not impact how npm itself is executed but it does impact +how lifecycle scripts are called. + +#### \`node-version\` + +* Default: Node.js \`process.version\` value +* Type: SemVer string + +The node version to use when checking a package's \`engines\` setting. + +#### \`noproxy\` + +* Default: The value of the NO_PROXY environment variable +* Type: String (can be set multiple times) + +Domain extensions that should bypass any proxies. + +Also accepts a comma-delimited string. + +#### \`npm-version\` + +* Default: Output of \`npm --version\` +* Type: SemVer string + +The npm version to use when checking a package's \`engines\` setting. + +#### \`offline\` + +* Default: false +* Type: Boolean + +Force offline mode: no network requests will be done during install. To +allow the CLI to fill in missing cache data, see \`--prefer-offline\`. + +#### \`omit\` + +* Default: 'dev' if the \`NODE_ENV\` environment variable is set to + 'production', otherwise empty. +* Type: "dev", "optional", or "peer" (can be set multiple times) + +Dependency types to omit from the installation tree on disk. + +Note that these dependencies _are_ still resolved and added to the +\`package-lock.json\` or \`npm-shrinkwrap.json\` file. They are just not +physically installed on disk. + +If a package type appears in both the \`--include\` and \`--omit\` lists, then +it will be included. + +If the resulting omit list includes \`'dev'\`, then the \`NODE_ENV\` environment +variable will be set to \`'production'\` for all lifecycle scripts. + +#### \`omit-lockfile-registry-resolved\` + +* Default: false +* Type: Boolean + +This option causes npm to create lock files without a \`resolved\` key for +registry dependencies. Subsequent installs will need to resolve tarball +endpoints with the configured registry, likely resulting in a longer install +time. + +#### \`otp\` + +* Default: null +* Type: null or String + +This is a one-time password from a two-factor authenticator. It's needed +when publishing or changing package permissions with \`npm access\`. + +If not set, and a registry response fails with a challenge for a one-time +password, npm will prompt on the command line for one. + +#### \`pack-destination\` + +* Default: "." +* Type: String + +Directory in which \`npm pack\` will save tarballs. + +#### \`package\` + +* Default: +* Type: String (can be set multiple times) + +The package or packages to install for [\`npm exec\`](/commands/npm-exec) + +#### \`package-lock\` + +* Default: true +* Type: Boolean + +If set to false, then ignore \`package-lock.json\` files when installing. This +will also prevent _writing_ \`package-lock.json\` if \`save\` is true. + +This configuration does not affect \`npm ci\`. + +#### \`package-lock-only\` + +* Default: false +* Type: Boolean + +If set to true, the current operation will only use the \`package-lock.json\`, +ignoring \`node_modules\`. + +For \`update\` this means only the \`package-lock.json\` will be updated, +instead of checking \`node_modules\` and downloading dependencies. + +For \`list\` this means the output will be based on the tree described by the +\`package-lock.json\`, rather than the contents of \`node_modules\`. + +#### \`parseable\` + +* Default: false +* Type: Boolean + +Output parseable results from commands that write to standard output. For +\`npm search\`, this will be tab-separated table format. + +#### \`prefer-offline\` + +* Default: false +* Type: Boolean + +If true, staleness checks for cached data will be bypassed, but missing data +will be requested from the server. To force full offline mode, use +\`--offline\`. + +#### \`prefer-online\` + +* Default: false +* Type: Boolean + +If true, staleness checks for cached data will be forced, making the CLI +look for updates immediately even for fresh package data. + +#### \`prefix\` + +* Default: In global mode, the folder where the node executable is installed. + In local mode, the nearest parent folder containing either a package.json + file or a node_modules folder. +* Type: Path + +The location to install global items. If set on the command line, then it +forces non-global commands to run in the specified folder. + +#### \`preid\` + +* Default: "" +* Type: String + +The "prerelease identifier" to use as a prefix for the "prerelease" part of +a semver. Like the \`rc\` in \`1.2.0-rc.8\`. + +#### \`progress\` + +* Default: \`true\` unless running in a known CI system +* Type: Boolean + +When set to \`true\`, npm will display a progress bar during time intensive +operations, if \`process.stderr\` is a TTY. + +Set to \`false\` to suppress the progress bar. + +#### \`proxy\` + +* Default: null +* Type: null, false, or URL + +A proxy to use for outgoing http requests. If the \`HTTP_PROXY\` or +\`http_proxy\` environment variables are set, proxy settings will be honored +by the underlying \`request\` library. + +#### \`read-only\` + +* Default: false +* Type: Boolean + +This is used to mark a token as unable to publish when configuring limited +access tokens with the \`npm token create\` command. + +#### \`rebuild-bundle\` + +* Default: true +* Type: Boolean + +Rebuild bundled dependencies after installation. + +#### \`registry\` + +* Default: "https://registry.npmjs.org/" +* Type: URL + +The base URL of the npm registry. + +#### \`replace-registry-host\` + +* Default: "npmjs" +* Type: "npmjs", "never", "always", or String + +Defines behavior for replacing the registry host in a lockfile with the +configured registry. + +The default behavior is to replace package dist URLs from the default +registry (https://registry.npmjs.org) to the configured registry. If set to +"never", then use the registry value. If set to "always", then replace the +registry host with the configured host every time. + +You may also specify a bare hostname (e.g., "registry.npmjs.org"). + +#### \`save\` + +* Default: \`true\` unless when using \`npm update\` where it defaults to \`false\` +* Type: Boolean + +Save installed packages to a \`package.json\` file as dependencies. + +When used with the \`npm rm\` command, removes the dependency from +\`package.json\`. + +Will also prevent writing to \`package-lock.json\` if set to \`false\`. + +#### \`save-bundle\` + +* Default: false +* Type: Boolean + +If a package would be saved at install time by the use of \`--save\`, +\`--save-dev\`, or \`--save-optional\`, then also put it in the +\`bundleDependencies\` list. + +Ignored if \`--save-peer\` is set, since peerDependencies cannot be bundled. + +#### \`save-dev\` + +* Default: false +* Type: Boolean + +Save installed packages to a package.json file as \`devDependencies\`. + +#### \`save-exact\` + +* Default: false +* Type: Boolean + +Dependencies saved to package.json will be configured with an exact version +rather than using npm's default semver range operator. + +#### \`save-optional\` + +* Default: false +* Type: Boolean + +Save installed packages to a package.json file as \`optionalDependencies\`. + +#### \`save-peer\` + +* Default: false +* Type: Boolean + +Save installed packages to a package.json file as \`peerDependencies\` + +#### \`save-prefix\` + +* Default: "^" +* Type: String + +Configure how versions of packages installed to a package.json file via +\`--save\` or \`--save-dev\` get prefixed. + +For example if a package has version \`1.2.3\`, by default its version is set +to \`^1.2.3\` which allows minor upgrades for that package, but after \`npm +config set save-prefix='~'\` it would be set to \`~1.2.3\` which only allows +patch upgrades. + +#### \`save-prod\` + +* Default: false +* Type: Boolean + +Save installed packages into \`dependencies\` specifically. This is useful if +a package already exists in \`devDependencies\` or \`optionalDependencies\`, but +you want to move it to be a non-optional production dependency. + +This is the default behavior if \`--save\` is true, and neither \`--save-dev\` +or \`--save-optional\` are true. + +#### \`scope\` + +* Default: the scope of the current project, if any, or "" +* Type: String + +Associate an operation with a scope for a scoped registry. + +Useful when logging in to or out of a private registry: + +\`\`\` +# log in, linking the scope to the custom registry +npm login --scope=@mycorp --registry=https://registry.mycorp.com + +# log out, removing the link and the auth token +npm logout --scope=@mycorp +\`\`\` + +This will cause \`@mycorp\` to be mapped to the registry for future +installation of packages specified according to the pattern +\`@mycorp/package\`. + +This will also cause \`npm init\` to create a scoped package. + +\`\`\` +# accept all defaults, and create a package named "@foo/whatever", +# instead of just named "whatever" +npm init --scope=@foo --yes +\`\`\` + + +#### \`script-shell\` + +* Default: '/bin/sh' on POSIX systems, 'cmd.exe' on Windows +* Type: null or String + +The shell to use for scripts run with the \`npm exec\`, \`npm run\` and \`npm +init \` commands. + +#### \`searchexclude\` + +* Default: "" +* Type: String + +Space-separated options that limit the results from search. + +#### \`searchlimit\` + +* Default: 20 +* Type: Number + +Number of items to limit search results to. Will not apply at all to legacy +searches. + +#### \`searchopts\` + +* Default: "" +* Type: String + +Space-separated options that are always passed to search. + +#### \`searchstaleness\` + +* Default: 900 +* Type: Number + +The age of the cache, in seconds, before another registry request is made if +using legacy search endpoint. + +#### \`shell\` + +* Default: SHELL environment variable, or "bash" on Posix, or "cmd.exe" on + Windows +* Type: String + +The shell to run for the \`npm explore\` command. + +#### \`sign-git-commit\` + +* Default: false +* Type: Boolean + +If set to true, then the \`npm version\` command will commit the new package +version using \`-S\` to add a signature. + +Note that git requires you to have set up GPG keys in your git configs for +this to work properly. + +#### \`sign-git-tag\` + +* Default: false +* Type: Boolean + +If set to true, then the \`npm version\` command will tag the version using +\`-s\` to add a signature. + +Note that git requires you to have set up GPG keys in your git configs for +this to work properly. + +#### \`strict-peer-deps\` + +* Default: false +* Type: Boolean + +If set to \`true\`, and \`--legacy-peer-deps\` is not set, then _any_ +conflicting \`peerDependencies\` will be treated as an install failure, even +if npm could reasonably guess the appropriate resolution based on non-peer +dependency relationships. + +By default, conflicting \`peerDependencies\` deep in the dependency graph will +be resolved using the nearest non-peer dependency specification, even if +doing so will result in some packages receiving a peer dependency outside +the range set in their package's \`peerDependencies\` object. + +When such and override is performed, a warning is printed, explaining the +conflict and the packages involved. If \`--strict-peer-deps\` is set, then +this warning is treated as a failure. + +#### \`strict-ssl\` + +* Default: true +* Type: Boolean + +Whether or not to do SSL key validation when making requests to the registry +via https. + +See also the \`ca\` config. + +#### \`tag\` + +* Default: "latest" +* Type: String + +If you ask npm to install a package and don't tell it a specific version, +then it will install the specified tag. + +Also the tag that is added to the package@version specified by the \`npm tag\` +command, if no explicit tag is given. + +When used by the \`npm diff\` command, this is the tag used to fetch the +tarball that will be compared with the local files by default. + +#### \`tag-version-prefix\` + +* Default: "v" +* Type: String + +If set, alters the prefix used when tagging a new version when performing a +version increment using \`npm-version\`. To remove the prefix altogether, set +it to the empty string: \`""\`. + +Because other tools may rely on the convention that npm version tags look +like \`v1.0.0\`, _only use this property if it is absolutely necessary_. In +particular, use care when overriding this setting for public packages. + +#### \`timing\` + +* Default: false +* Type: Boolean + +If true, writes a debug log to \`logs-dir\` and timing information to +\`_timing.json\` in the cache, even if the command completes successfully. +\`_timing.json\` is a newline delimited list of JSON objects. + +You can quickly view it with this [json](https://npm.im/json) command line: +\`npm exec -- json -g < ~/.npm/_timing.json\`. + +#### \`umask\` + +* Default: 0 +* Type: Octal numeric string in range 0000..0777 (0..511) + +The "umask" value to use when setting the file creation mode on files and +folders. + +Folders and executables are given a mode which is \`0o777\` masked against +this value. Other files are given a mode which is \`0o666\` masked against +this value. + +Note that the underlying system will _also_ apply its own umask value to +files and folders that are created, and npm does not circumvent this, but +rather adds the \`--umask\` config to it. + +Thus, the effective default umask value on most POSIX systems is 0o22, +meaning that folders and executables are created with a mode of 0o755 and +other files are created with a mode of 0o644. + +#### \`unicode\` + +* Default: false on windows, true on mac/unix systems with a unicode locale, + as defined by the \`LC_ALL\`, \`LC_CTYPE\`, or \`LANG\` environment variables. +* Type: Boolean + +When set to true, npm uses unicode characters in the tree output. When +false, it uses ascii characters instead of unicode glyphs. + +#### \`update-notifier\` + +* Default: true +* Type: Boolean + +Set to false to suppress the update notification when using an older version +of npm than the latest. + +#### \`usage\` + +* Default: false +* Type: Boolean + +Show short usage output about the command specified. + +#### \`user-agent\` + +* Default: "npm/{npm-version} node/{node-version} {platform} {arch} + workspaces/{workspaces} {ci}" +* Type: String + +Sets the User-Agent request header. The following fields are replaced with +their actual counterparts: + +* \`{npm-version}\` - The npm version in use +* \`{node-version}\` - The Node.js version in use +* \`{platform}\` - The value of \`process.platform\` +* \`{arch}\` - The value of \`process.arch\` +* \`{workspaces}\` - Set to \`true\` if the \`workspaces\` or \`workspace\` options + are set. +* \`{ci}\` - The value of the \`ci-name\` config, if set, prefixed with \`ci/\`, or + an empty string if \`ci-name\` is empty. + +#### \`userconfig\` + +* Default: "~/.npmrc" +* Type: Path + +The location of user-level configuration settings. + +This may be overridden by the \`npm_config_userconfig\` environment variable +or the \`--userconfig\` command line option, but may _not_ be overridden by +settings in the \`globalconfig\` file. + +#### \`version\` + +* Default: false +* Type: Boolean + +If true, output the npm version and exit successfully. + +Only relevant when specified explicitly on the command line. + +#### \`versions\` + +* Default: false +* Type: Boolean + +If true, output the npm version as well as node's \`process.versions\` map and +the version in the current working directory's \`package.json\` file if one +exists, and exit successfully. + +Only relevant when specified explicitly on the command line. + +#### \`viewer\` + +* Default: "man" on Posix, "browser" on Windows +* Type: String + +The program to use to view help content. + +Set to \`"browser"\` to view html help content in the default web browser. + +#### \`which\` + +* Default: null +* Type: null or Number + +If there are multiple funding sources, which 1-indexed source URL to open. + +#### \`workspace\` + +* Default: +* Type: String (can be set multiple times) + +Enable running a command in the context of the configured workspaces of the +current project while filtering by running only the workspaces defined by +this configuration option. + +Valid values for the \`workspace\` config are either: + +* Workspace names +* Path to a workspace directory +* Path to a parent workspace directory (will result in selecting all + workspaces within that folder) + +When set for the \`npm init\` command, this may be set to the folder of a +workspace which does not yet exist, to create the folder and set it up as a +brand new workspace within the project. + +This value is not exported to the environment for child processes. + +#### \`workspaces\` + +* Default: null +* Type: null or Boolean + +Set to true to run the command in the context of **all** configured +workspaces. + +Explicitly setting this to false will cause commands like \`install\` to +ignore workspaces altogether. When not set explicitly: + +- Commands that operate on the \`node_modules\` tree (install, update, etc.) +will link workspaces into the \`node_modules\` folder. - Commands that do +other things (test, exec, publish, etc.) will operate on the root project, +_unless_ one or more workspaces are specified in the \`workspace\` config. + +This value is not exported to the environment for child processes. + +#### \`workspaces-update\` + +* Default: true +* Type: Boolean + +If set to true, the npm cli will run an update after operations that may +possibly change the workspaces installed to the \`node_modules\` folder. + +#### \`yes\` + +* Default: null +* Type: null or Boolean + +Automatically answer "yes" to any prompts that npm might print on the +command line. + +#### \`also\` + +* Default: null +* Type: null, "dev", or "development" +* DEPRECATED: Please use --include=dev instead. + +When set to \`dev\` or \`development\`, this is an alias for \`--include=dev\`. + +#### \`cache-max\` + +* Default: Infinity +* Type: Number +* DEPRECATED: This option has been deprecated in favor of \`--prefer-online\` + +\`--cache-max=0\` is an alias for \`--prefer-online\` + +#### \`cache-min\` + +* Default: 0 +* Type: Number +* DEPRECATED: This option has been deprecated in favor of \`--prefer-offline\`. + +\`--cache-min=9999 (or bigger)\` is an alias for \`--prefer-offline\`. + +#### \`dev\` + +* Default: false +* Type: Boolean +* DEPRECATED: Please use --include=dev instead. + +Alias for \`--include=dev\`. + +#### \`init.author.email\` + +* Default: "" +* Type: String +* DEPRECATED: Use \`--init-author-email\` instead. + +Alias for \`--init-author-email\` + +#### \`init.author.name\` + +* Default: "" +* Type: String +* DEPRECATED: Use \`--init-author-name\` instead. + +Alias for \`--init-author-name\` + +#### \`init.author.url\` + +* Default: "" +* Type: "" or URL +* DEPRECATED: Use \`--init-author-url\` instead. + +Alias for \`--init-author-url\` + +#### \`init.license\` + +* Default: "ISC" +* Type: String +* DEPRECATED: Use \`--init-license\` instead. + +Alias for \`--init-license\` + +#### \`init.module\` + +* Default: "~/.npm-init.js" +* Type: Path +* DEPRECATED: Use \`--init-module\` instead. + +Alias for \`--init-module\` + +#### \`init.version\` + +* Default: "1.0.0" +* Type: SemVer string +* DEPRECATED: Use \`--init-version\` instead. + +Alias for \`--init-version\` + +#### \`only\` + +* Default: null +* Type: null, "prod", or "production" +* DEPRECATED: Use \`--omit=dev\` to omit dev dependencies from the install. + +When set to \`prod\` or \`production\`, this is an alias for \`--omit=dev\`. + +#### \`optional\` + +* Default: null +* Type: null or Boolean +* DEPRECATED: Use \`--omit=optional\` to exclude optional dependencies, or + \`--include=optional\` to include them. + +Default value does install optional deps unless otherwise omitted. + +Alias for --include=optional or --omit=optional + +#### \`production\` + +* Default: null +* Type: null or Boolean +* DEPRECATED: Use \`--omit=dev\` instead. + +Alias for \`--omit=dev\` + +#### \`shrinkwrap\` + +* Default: true +* Type: Boolean +* DEPRECATED: Use the --package-lock setting instead. + +Alias for --package-lock + +#### \`sso-poll-frequency\` + +* Default: 500 +* Type: Number +* DEPRECATED: The --auth-type method of SSO/SAML/OAuth will be removed in a + future version of npm in favor of web-based login. + +When used with SSO-enabled \`auth-type\`s, configures how regularly the +registry should be polled while the user is completing authentication. + +#### \`sso-type\` + +* Default: "oauth" +* Type: null, "oauth", or "saml" +* DEPRECATED: The --auth-type method of SSO/SAML/OAuth will be removed in a + future version of npm in favor of web-based login. + +If \`--auth-type=sso\`, the type of SSO type to use. + +#### \`tmp\` + +* Default: The value returned by the Node.js \`os.tmpdir()\` method + +* Type: Path +* DEPRECATED: This setting is no longer used. npm stores temporary files in a + special location in the cache, and they are managed by + [\`cacache\`](http://npm.im/cacache). + +Historically, the location where temporary files were stored. No longer +relevant. +` + +exports[`test/lib/docs.js TAP config > all keys 1`] = ` +Array [ + "_auth", + "access", + "all", + "allow-same-version", + "also", + "audit", + "audit-level", + "auth-type", + "before", + "bin-links", + "browser", + "ca", + "cache", + "cache-max", + "cache-min", + "cafile", + "call", + "cert", + "ci-name", + "cidr", + "color", + "commit-hooks", + "depth", + "description", + "dev", + "diff", + "diff-ignore-all-space", + "diff-name-only", + "diff-no-prefix", + "diff-dst-prefix", + "diff-src-prefix", + "diff-text", + "diff-unified", + "dry-run", + "editor", + "engine-strict", + "fetch-retries", + "fetch-retry-factor", + "fetch-retry-maxtimeout", + "fetch-retry-mintimeout", + "fetch-timeout", + "force", + "foreground-scripts", + "format-package-lock", + "fund", + "git", + "git-tag-version", + "global", + "global-style", + "globalconfig", + "heading", + "https-proxy", + "if-present", + "ignore-scripts", + "include", + "include-staged", + "include-workspace-root", + "init-author-email", + "init-author-name", + "init-author-url", + "init-license", + "init-module", + "init-version", + "init.author.email", + "init.author.name", + "init.author.url", + "init.license", + "init.module", + "init.version", + "install-links", + "json", + "key", + "legacy-bundling", + "legacy-peer-deps", + "link", + "local-address", + "location", + "lockfile-version", + "loglevel", + "logs-dir", + "logs-max", + "long", + "maxsockets", + "message", + "node-options", + "node-version", + "noproxy", + "npm-version", + "offline", + "omit", + "omit-lockfile-registry-resolved", + "only", + "optional", + "otp", + "package", + "package-lock", + "package-lock-only", + "pack-destination", + "parseable", + "prefer-offline", + "prefer-online", + "prefix", + "preid", + "production", + "progress", + "proxy", + "read-only", + "rebuild-bundle", + "registry", + "replace-registry-host", + "save", + "save-bundle", + "save-dev", + "save-exact", + "save-optional", + "save-peer", + "save-prefix", + "save-prod", + "scope", + "script-shell", + "searchexclude", + "searchlimit", + "searchopts", + "searchstaleness", + "shell", + "shrinkwrap", + "sign-git-commit", + "sign-git-tag", + "sso-poll-frequency", + "sso-type", + "strict-peer-deps", + "strict-ssl", + "tag", + "tag-version-prefix", + "timing", + "tmp", + "umask", + "unicode", + "update-notifier", + "usage", + "user-agent", + "userconfig", + "version", + "versions", + "viewer", + "which", + "workspace", + "workspaces", + "workspaces-update", + "yes", +] +` + +exports[`test/lib/docs.js TAP config > keys that are flattened 1`] = ` +Array [ + "_auth", + "access", + "all", + "allow-same-version", + "also", + "audit", + "audit-level", + "auth-type", + "before", + "bin-links", + "browser", + "ca", + "cache", + "cache-max", + "cache-min", + "cafile", + "call", + "cert", + "ci-name", + "cidr", + "color", + "commit-hooks", + "depth", + "description", + "dev", + "diff", + "diff-ignore-all-space", + "diff-name-only", + "diff-no-prefix", + "diff-dst-prefix", + "diff-src-prefix", + "diff-text", + "diff-unified", + "dry-run", + "editor", + "engine-strict", + "fetch-retries", + "fetch-retry-factor", + "fetch-retry-maxtimeout", + "fetch-retry-mintimeout", + "fetch-timeout", + "force", + "foreground-scripts", + "format-package-lock", + "fund", + "git", + "git-tag-version", + "global", + "global-style", + "globalconfig", + "heading", + "https-proxy", + "if-present", + "ignore-scripts", + "include", + "include-staged", + "include-workspace-root", + "install-links", + "json", + "key", + "legacy-bundling", + "legacy-peer-deps", + "local-address", + "location", + "lockfile-version", + "loglevel", + "maxsockets", + "message", + "node-version", + "noproxy", + "npm-version", + "offline", + "omit", + "omit-lockfile-registry-resolved", + "only", + "optional", + "otp", + "package", + "package-lock", + "package-lock-only", + "pack-destination", + "parseable", + "prefer-offline", + "prefer-online", + "preid", + "production", + "progress", + "proxy", + "read-only", + "rebuild-bundle", + "registry", + "replace-registry-host", + "save", + "save-bundle", + "save-dev", + "save-exact", + "save-optional", + "save-peer", + "save-prefix", + "save-prod", + "scope", + "script-shell", + "searchexclude", + "searchlimit", + "searchopts", + "searchstaleness", + "shell", + "shrinkwrap", + "sign-git-commit", + "sign-git-tag", + "sso-poll-frequency", + "sso-type", + "strict-peer-deps", + "strict-ssl", + "tag", + "tag-version-prefix", + "umask", + "user-agent", + "workspace", + "workspaces", + "workspaces-update", +] +` + +exports[`test/lib/docs.js TAP config > keys that are not flattened 1`] = ` +Array [ + "init-author-email", + "init-author-name", + "init-author-url", + "init-license", + "init-module", + "init-version", + "init.author.email", + "init.author.name", + "init.author.url", + "init.license", + "init.module", + "init.version", + "link", + "logs-dir", + "logs-max", + "long", + "node-options", + "prefix", + "timing", + "tmp", + "unicode", + "update-notifier", + "usage", + "userconfig", + "version", + "versions", + "viewer", + "which", + "yes", +] +` + +exports[`test/lib/docs.js TAP shorthands > docs 1`] = ` +* \`-a\`: \`--all\` +* \`--enjoy-by\`: \`--before\` +* \`-c\`: \`--call\` +* \`--desc\`: \`--description\` +* \`-f\`: \`--force\` +* \`-g\`: \`--global\` +* \`--iwr\`: \`--include-workspace-root\` +* \`-L\`: \`--location\` +* \`-d\`: \`--loglevel info\` +* \`-s\`: \`--loglevel silent\` +* \`--silent\`: \`--loglevel silent\` +* \`--ddd\`: \`--loglevel silly\` +* \`--dd\`: \`--loglevel verbose\` +* \`--verbose\`: \`--loglevel verbose\` +* \`-q\`: \`--loglevel warn\` +* \`--quiet\`: \`--loglevel warn\` +* \`-l\`: \`--long\` +* \`-m\`: \`--message\` +* \`--local\`: \`--no-global\` +* \`-n\`: \`--no-yes\` +* \`--no\`: \`--no-yes\` +* \`-p\`: \`--parseable\` +* \`--porcelain\`: \`--parseable\` +* \`-C\`: \`--prefix\` +* \`--readonly\`: \`--read-only\` +* \`--reg\`: \`--registry\` +* \`-S\`: \`--save\` +* \`-B\`: \`--save-bundle\` +* \`-D\`: \`--save-dev\` +* \`-E\`: \`--save-exact\` +* \`-O\`: \`--save-optional\` +* \`-P\`: \`--save-prod\` +* \`-?\`: \`--usage\` +* \`-h\`: \`--usage\` +* \`-H\`: \`--usage\` +* \`--help\`: \`--usage\` +* \`-v\`: \`--version\` +* \`-w\`: \`--workspace\` +* \`--ws\`: \`--workspaces\` +* \`-y\`: \`--yes\` +` + +exports[`test/lib/docs.js TAP usage access > must match snapshot 1`] = ` +Set access level on published packages + +Usage: +npm access public [] +npm access restricted [] +npm access grant [] +npm access revoke [] +npm access 2fa-required [] +npm access 2fa-not-required [] +npm access ls-packages [||] +npm access ls-collaborators [ []] +npm access edit [] + +Options: +[--registry ] [--otp ] + +Run "npm help access" for more info + +\`\`\`bash +npm access public [] +npm access restricted [] +npm access grant [] +npm access revoke [] +npm access 2fa-required [] +npm access 2fa-not-required [] +npm access ls-packages [||] +npm access ls-collaborators [ []] +npm access edit [] +\`\`\` + +#### \`registry\` +#### \`otp\` +` + +exports[`test/lib/docs.js TAP usage adduser > must match snapshot 1`] = ` +Add a registry user account + +Usage: +npm adduser + +Options: +[--registry ] [--scope <@scope>] +[--auth-type ] + +aliases: login, add-user + +Run "npm help adduser" for more info + +\`\`\`bash +npm adduser + +aliases: login, add-user +\`\`\` + +#### \`registry\` +#### \`scope\` +#### \`auth-type\` +` + +exports[`test/lib/docs.js TAP usage audit > must match snapshot 1`] = ` +Run a security audit + +Usage: +npm audit [fix|signatures] + +Options: +[--audit-level ] [--dry-run] [-f|--force] +[--json] [--package-lock-only] +[--omit [--omit ...]] +[--foreground-scripts] [--ignore-scripts] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +Run "npm help audit" for more info + +\`\`\`bash +npm audit [fix|signatures] +\`\`\` + +#### \`audit-level\` +#### \`dry-run\` +#### \`force\` +#### \`json\` +#### \`package-lock-only\` +#### \`omit\` +#### \`foreground-scripts\` +#### \`ignore-scripts\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage bin > must match snapshot 1`] = ` +Display npm bin folder + +Usage: +npm bin + +Options: +[-g|--global] + +Run "npm help bin" for more info + +\`\`\`bash +npm bin +\`\`\` + +#### \`global\` +` + +exports[`test/lib/docs.js TAP usage bugs > must match snapshot 1`] = ` +Report bugs for a package in a web browser + +Usage: +npm bugs [ [ ...]] + +Options: +[--no-browser|--browser ] [--registry ] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] + +alias: issues + +Run "npm help bugs" for more info + +\`\`\`bash +npm bugs [ [ ...]] + +alias: issues +\`\`\` + +#### \`browser\` +#### \`registry\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +` + +exports[`test/lib/docs.js TAP usage cache > must match snapshot 1`] = ` +Manipulates packages cache + +Usage: +npm cache add +npm cache clean [] +npm cache ls [@] +npm cache verify + +Options: +[--cache ] + +Run "npm help cache" for more info + +\`\`\`bash +npm cache add +npm cache clean [] +npm cache ls [@] +npm cache verify +\`\`\` + +#### \`cache\` +` + +exports[`test/lib/docs.js TAP usage ci > must match snapshot 1`] = ` +Clean install a project + +Usage: +npm ci + +Options: +[-S|--save|--no-save|--save-prod|--save-dev|--save-optional|--save-peer|--save-bundle] +[-E|--save-exact] [-g|--global] [--global-style] [--legacy-bundling] +[--omit [--omit ...]] +[--strict-peer-deps] [--no-package-lock] [--foreground-scripts] +[--ignore-scripts] [--no-audit] [--no-bin-links] [--no-fund] [--dry-run] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +aliases: clean-install, ic, install-clean, isntall-clean + +Run "npm help ci" for more info + +\`\`\`bash +npm ci + +aliases: clean-install, ic, install-clean, isntall-clean +\`\`\` + +#### \`save\` +#### \`save-exact\` +#### \`global\` +#### \`global-style\` +#### \`legacy-bundling\` +#### \`omit\` +#### \`strict-peer-deps\` +#### \`package-lock\` +#### \`foreground-scripts\` +#### \`ignore-scripts\` +#### \`audit\` +#### \`bin-links\` +#### \`fund\` +#### \`dry-run\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage completion > must match snapshot 1`] = ` +Tab Completion for npm + +Usage: +npm completion + +Run "npm help completion" for more info + +\`\`\`bash +npm completion +\`\`\` + +NO PARAMS +` + +exports[`test/lib/docs.js TAP usage config > must match snapshot 1`] = ` +Manage the npm configuration files + +Usage: +npm config set = [= ...] +npm config get [ [ ...]] +npm config delete [ ...] +npm config list [--json] +npm config edit + +Options: +[--json] [-g|--global] [--editor ] [-L|--location ] +[-l|--long] + +alias: c + +Run "npm help config" for more info + +\`\`\`bash +npm config set = [= ...] +npm config get [ [ ...]] +npm config delete [ ...] +npm config list [--json] +npm config edit + +alias: c +\`\`\` + +#### \`json\` +#### \`global\` +#### \`editor\` +#### \`location\` +#### \`long\` +` + +exports[`test/lib/docs.js TAP usage dedupe > must match snapshot 1`] = ` +Reduce duplication in the package tree + +Usage: +npm dedupe + +Options: +[--global-style] [--legacy-bundling] [--strict-peer-deps] [--no-package-lock] +[--omit [--omit ...]] [--ignore-scripts] +[--no-audit] [--no-bin-links] [--no-fund] [--dry-run] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +alias: ddp + +Run "npm help dedupe" for more info + +\`\`\`bash +npm dedupe + +alias: ddp +\`\`\` + +#### \`global-style\` +#### \`legacy-bundling\` +#### \`strict-peer-deps\` +#### \`package-lock\` +#### \`omit\` +#### \`ignore-scripts\` +#### \`audit\` +#### \`bin-links\` +#### \`fund\` +#### \`dry-run\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage deprecate > must match snapshot 1`] = ` +Deprecate a version of a package + +Usage: +npm deprecate + +Options: +[--registry ] [--otp ] + +Run "npm help deprecate" for more info + +\`\`\`bash +npm deprecate +\`\`\` + +#### \`registry\` +#### \`otp\` +` + +exports[`test/lib/docs.js TAP usage diff > must match snapshot 1`] = ` +The registry diff command + +Usage: +npm diff [...] + +Options: +[--diff [--diff ...]] [--diff-name-only] +[--diff-unified ] [--diff-ignore-all-space] [--diff-no-prefix] +[--diff-src-prefix ] [--diff-dst-prefix ] [--diff-text] [-g|--global] +[--tag ] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] + +Run "npm help diff" for more info + +\`\`\`bash +npm diff [...] +\`\`\` + +#### \`diff\` +#### \`diff-name-only\` +#### \`diff-unified\` +#### \`diff-ignore-all-space\` +#### \`diff-no-prefix\` +#### \`diff-src-prefix\` +#### \`diff-dst-prefix\` +#### \`diff-text\` +#### \`global\` +#### \`tag\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +` + +exports[`test/lib/docs.js TAP usage dist-tag > must match snapshot 1`] = ` +Modify package distribution tags + +Usage: +npm dist-tag add [] +npm dist-tag rm +npm dist-tag ls [] + +Options: +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] + +alias: dist-tags + +Run "npm help dist-tag" for more info + +\`\`\`bash +npm dist-tag add [] +npm dist-tag rm +npm dist-tag ls [] + +alias: dist-tags +\`\`\` + +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +` + +exports[`test/lib/docs.js TAP usage docs > must match snapshot 1`] = ` +Open documentation for a package in a web browser + +Usage: +npm docs [ [ ...]] + +Options: +[--no-browser|--browser ] [--registry ] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] + +alias: home + +Run "npm help docs" for more info + +\`\`\`bash +npm docs [ [ ...]] + +alias: home +\`\`\` + +#### \`browser\` +#### \`registry\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +` + +exports[`test/lib/docs.js TAP usage doctor > must match snapshot 1`] = ` +Check your npm environment + +Usage: +npm doctor + +Options: +[--registry ] + +Run "npm help doctor" for more info + +\`\`\`bash +npm doctor +\`\`\` + +#### \`registry\` +` + +exports[`test/lib/docs.js TAP usage edit > must match snapshot 1`] = ` +Edit an installed package + +Usage: +npm edit [/...] + +Options: +[--editor ] + +Run "npm help edit" for more info + +\`\`\`bash +npm edit [/...] +\`\`\` + +#### \`editor\` +` + +exports[`test/lib/docs.js TAP usage exec > must match snapshot 1`] = ` +Run a command from a local or remote npm package + +Usage: +npm exec -- [@] [args...] +npm exec --package=[@] -- [args...] +npm exec -c ' [args...]' +npm exec --package=foo -c ' [args...]' + +Options: +[--package [--package ...]] [-c|--call ] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] + +alias: x + +Run "npm help exec" for more info + +\`\`\`bash +npm exec -- [@] [args...] +npm exec --package=[@] -- [args...] +npm exec -c ' [args...]' +npm exec --package=foo -c ' [args...]' + +alias: x +\`\`\` + +#### \`package\` +#### \`call\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +` + +exports[`test/lib/docs.js TAP usage explain > must match snapshot 1`] = ` +Explain installed packages + +Usage: +npm explain + +Options: +[--json] [-w|--workspace [-w|--workspace ...]] + +alias: why + +Run "npm help explain" for more info + +\`\`\`bash +npm explain + +alias: why +\`\`\` + +#### \`json\` +#### \`workspace\` +` + +exports[`test/lib/docs.js TAP usage explore > must match snapshot 1`] = ` +Browse an installed package + +Usage: +npm explore [ -- ] + +Options: +[--shell ] + +Run "npm help explore" for more info + +\`\`\`bash +npm explore [ -- ] +\`\`\` + +#### \`shell\` +` + +exports[`test/lib/docs.js TAP usage find-dupes > must match snapshot 1`] = ` +Find duplication in the package tree + +Usage: +npm find-dupes + +Options: +[--global-style] [--legacy-bundling] [--strict-peer-deps] [--no-package-lock] +[--omit [--omit ...]] [--ignore-scripts] +[--no-audit] [--no-bin-links] [--no-fund] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +Run "npm help find-dupes" for more info + +\`\`\`bash +npm find-dupes +\`\`\` + +#### \`global-style\` +#### \`legacy-bundling\` +#### \`strict-peer-deps\` +#### \`package-lock\` +#### \`omit\` +#### \`ignore-scripts\` +#### \`audit\` +#### \`bin-links\` +#### \`fund\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage fund > must match snapshot 1`] = ` +Retrieve funding information + +Usage: +npm fund [] + +Options: +[--json] [--no-browser|--browser ] [--unicode] +[-w|--workspace [-w|--workspace ...]] +[--which ] + +Run "npm help fund" for more info + +\`\`\`bash +npm fund [] +\`\`\` + +#### \`json\` +#### \`browser\` +#### \`unicode\` +#### \`workspace\` +#### \`which\` +` + +exports[`test/lib/docs.js TAP usage get > must match snapshot 1`] = ` +Get a value from the npm configuration + +Usage: +npm get [ ...] (See \`npm config\`) + +Run "npm help get" for more info + +\`\`\`bash +npm get [ ...] (See \`npm config\`) +\`\`\` + +NO PARAMS +` + +exports[`test/lib/docs.js TAP usage help > must match snapshot 1`] = ` +Get help on npm + +Usage: +npm help [] + +Options: +[--viewer ] + +alias: hlep + +Run "npm help help" for more info + +\`\`\`bash +npm help [] + +alias: hlep +\`\`\` + +#### \`viewer\` +` + +exports[`test/lib/docs.js TAP usage help-search > must match snapshot 1`] = ` +Search npm help documentation + +Usage: +npm help-search + +Options: +[-l|--long] + +Run "npm help help-search" for more info + +\`\`\`bash +npm help-search +\`\`\` + +#### \`long\` +` + +exports[`test/lib/docs.js TAP usage hook > must match snapshot 1`] = ` +Manage registry hooks + +Usage: +npm hook add [--type=] +npm hook ls [pkg] +npm hook rm +npm hook update + +Options: +[--registry ] [--otp ] + +Run "npm help hook" for more info + +\`\`\`bash +npm hook add [--type=] +npm hook ls [pkg] +npm hook rm +npm hook update +\`\`\` + +#### \`registry\` +#### \`otp\` +` + +exports[`test/lib/docs.js TAP usage init > must match snapshot 1`] = ` +Create a package.json file + +Usage: +npm init (same as \`npx ) +npm init <@scope> (same as \`npx <@scope>/create\`) + +Options: +[-y|--yes] [-f|--force] [--scope <@scope>] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--no-workspaces-update] [--include-workspace-root] + +aliases: create, innit + +Run "npm help init" for more info + +\`\`\`bash +npm init (same as \`npx ) +npm init <@scope> (same as \`npx <@scope>/create\`) + +aliases: create, innit +\`\`\` + +#### \`yes\` +#### \`force\` +#### \`scope\` +#### \`workspace\` +#### \`workspaces\` +#### \`workspaces-update\` +#### \`include-workspace-root\` +` + +exports[`test/lib/docs.js TAP usage install > must match snapshot 1`] = ` +Install a package + +Usage: +npm install [ ...] + +Options: +[-S|--save|--no-save|--save-prod|--save-dev|--save-optional|--save-peer|--save-bundle] +[-E|--save-exact] [-g|--global] [--global-style] [--legacy-bundling] +[--omit [--omit ...]] +[--strict-peer-deps] [--no-package-lock] [--foreground-scripts] +[--ignore-scripts] [--no-audit] [--no-bin-links] [--no-fund] [--dry-run] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +aliases: add, i, in, ins, inst, insta, instal, isnt, isnta, isntal, isntall + +Run "npm help install" for more info + +\`\`\`bash +npm install [ ...] + +aliases: add, i, in, ins, inst, insta, instal, isnt, isnta, isntal, isntall +\`\`\` + +#### \`save\` +#### \`save-exact\` +#### \`global\` +#### \`global-style\` +#### \`legacy-bundling\` +#### \`omit\` +#### \`strict-peer-deps\` +#### \`package-lock\` +#### \`foreground-scripts\` +#### \`ignore-scripts\` +#### \`audit\` +#### \`bin-links\` +#### \`fund\` +#### \`dry-run\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage install-ci-test > must match snapshot 1`] = ` +Install a project with a clean slate and run tests + +Usage: +npm install-ci-test + +Options: +[-S|--save|--no-save|--save-prod|--save-dev|--save-optional|--save-peer|--save-bundle] +[-E|--save-exact] [-g|--global] [--global-style] [--legacy-bundling] +[--omit [--omit ...]] +[--strict-peer-deps] [--no-package-lock] [--foreground-scripts] +[--ignore-scripts] [--no-audit] [--no-bin-links] [--no-fund] [--dry-run] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +alias: cit + +Run "npm help install-ci-test" for more info + +\`\`\`bash +npm install-ci-test + +alias: cit +\`\`\` + +#### \`save\` +#### \`save-exact\` +#### \`global\` +#### \`global-style\` +#### \`legacy-bundling\` +#### \`omit\` +#### \`strict-peer-deps\` +#### \`package-lock\` +#### \`foreground-scripts\` +#### \`ignore-scripts\` +#### \`audit\` +#### \`bin-links\` +#### \`fund\` +#### \`dry-run\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage install-test > must match snapshot 1`] = ` +Install package(s) and run tests + +Usage: +npm install-test [ ...] + +Options: +[-S|--save|--no-save|--save-prod|--save-dev|--save-optional|--save-peer|--save-bundle] +[-E|--save-exact] [-g|--global] [--global-style] [--legacy-bundling] +[--omit [--omit ...]] +[--strict-peer-deps] [--no-package-lock] [--foreground-scripts] +[--ignore-scripts] [--no-audit] [--no-bin-links] [--no-fund] [--dry-run] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +alias: it + +Run "npm help install-test" for more info + +\`\`\`bash +npm install-test [ ...] + +alias: it +\`\`\` + +#### \`save\` +#### \`save-exact\` +#### \`global\` +#### \`global-style\` +#### \`legacy-bundling\` +#### \`omit\` +#### \`strict-peer-deps\` +#### \`package-lock\` +#### \`foreground-scripts\` +#### \`ignore-scripts\` +#### \`audit\` +#### \`bin-links\` +#### \`fund\` +#### \`dry-run\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage link > must match snapshot 1`] = ` +Symlink a package folder + +Usage: +npm link [] + +Options: +[-S|--save|--no-save|--save-prod|--save-dev|--save-optional|--save-peer|--save-bundle] +[-E|--save-exact] [-g|--global] [--global-style] [--legacy-bundling] +[--strict-peer-deps] [--no-package-lock] +[--omit [--omit ...]] [--ignore-scripts] +[--no-audit] [--no-bin-links] [--no-fund] [--dry-run] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +alias: ln + +Run "npm help link" for more info + +\`\`\`bash +npm link [] + +alias: ln +\`\`\` + +#### \`save\` +#### \`save-exact\` +#### \`global\` +#### \`global-style\` +#### \`legacy-bundling\` +#### \`strict-peer-deps\` +#### \`package-lock\` +#### \`omit\` +#### \`ignore-scripts\` +#### \`audit\` +#### \`bin-links\` +#### \`fund\` +#### \`dry-run\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage ll > must match snapshot 1`] = ` +List installed packages + +Usage: +npm ll [[<@scope>/] ...] + +Options: +[-a|--all] [--json] [-l|--long] [-p|--parseable] [-g|--global] [--depth ] +[--omit [--omit ...]] [--link] +[--package-lock-only] [--unicode] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +alias: la + +Run "npm help ll" for more info + +\`\`\`bash +npm ll [[<@scope>/] ...] + +alias: la +\`\`\` + +#### \`all\` +#### \`json\` +#### \`long\` +#### \`parseable\` +#### \`global\` +#### \`depth\` +#### \`omit\` +#### \`link\` +#### \`package-lock-only\` +#### \`unicode\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage logout > must match snapshot 1`] = ` +Log out of the registry + +Usage: +npm logout + +Options: +[--registry ] [--scope <@scope>] + +Run "npm help logout" for more info + +\`\`\`bash +npm logout +\`\`\` + +#### \`registry\` +#### \`scope\` +` + +exports[`test/lib/docs.js TAP usage ls > must match snapshot 1`] = ` +List installed packages + +Usage: +npm ls + +Options: +[-a|--all] [--json] [-l|--long] [-p|--parseable] [-g|--global] [--depth ] +[--omit [--omit ...]] [--link] +[--package-lock-only] [--unicode] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +alias: list + +Run "npm help ls" for more info + +\`\`\`bash +npm ls + +alias: list +\`\`\` + +#### \`all\` +#### \`json\` +#### \`long\` +#### \`parseable\` +#### \`global\` +#### \`depth\` +#### \`omit\` +#### \`link\` +#### \`package-lock-only\` +#### \`unicode\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage npm > must match snapshot 1`] = ` +\`\`\`bash +npm +\`\`\` + +NO PARAMS +` + +exports[`test/lib/docs.js TAP usage npx > must match snapshot 1`] = ` +\`\`\`bash +npx -- [@] [args...] +npx --package=[@] -- [args...] +npx -c ' [args...]' +npx --package=foo -c ' [args...]' +\`\`\` + +NO PARAMS +` + +exports[`test/lib/docs.js TAP usage org > must match snapshot 1`] = ` +Manage orgs + +Usage: +npm org set orgname username [developer | admin | owner] +npm org rm orgname username +npm org ls orgname [] + +Options: +[--registry ] [--otp ] [--json] [-p|--parseable] + +alias: ogr + +Run "npm help org" for more info + +\`\`\`bash +npm org set orgname username [developer | admin | owner] +npm org rm orgname username +npm org ls orgname [] + +alias: ogr +\`\`\` + +#### \`registry\` +#### \`otp\` +#### \`json\` +#### \`parseable\` +` + +exports[`test/lib/docs.js TAP usage outdated > must match snapshot 1`] = ` +Check for outdated packages + +Usage: +npm outdated [ ...] + +Options: +[-a|--all] [--json] [-l|--long] [-p|--parseable] [-g|--global] +[-w|--workspace [-w|--workspace ...]] + +Run "npm help outdated" for more info + +\`\`\`bash +npm outdated [ ...] +\`\`\` + +#### \`all\` +#### \`json\` +#### \`long\` +#### \`parseable\` +#### \`global\` +#### \`workspace\` +` + +exports[`test/lib/docs.js TAP usage owner > must match snapshot 1`] = ` +Manage package owners + +Usage: +npm owner add +npm owner rm +npm owner ls + +Options: +[--registry ] [--otp ] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] + +alias: author + +Run "npm help owner" for more info + +\`\`\`bash +npm owner add +npm owner rm +npm owner ls + +alias: author +\`\`\` + +#### \`registry\` +#### \`otp\` +#### \`workspace\` +#### \`workspaces\` +` + +exports[`test/lib/docs.js TAP usage pack > must match snapshot 1`] = ` +Create a tarball from a package + +Usage: +npm pack + +Options: +[--dry-run] [--json] [--pack-destination ] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] + +Run "npm help pack" for more info + +\`\`\`bash +npm pack +\`\`\` + +#### \`dry-run\` +#### \`json\` +#### \`pack-destination\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +` + +exports[`test/lib/docs.js TAP usage ping > must match snapshot 1`] = ` +Ping npm registry + +Usage: +npm ping + +Options: +[--registry ] + +Run "npm help ping" for more info + +\`\`\`bash +npm ping +\`\`\` + +#### \`registry\` +` + +exports[`test/lib/docs.js TAP usage pkg > must match snapshot 1`] = ` +Manages your package.json + +Usage: +npm pkg set = [= ...] +npm pkg get [ [ ...]] +npm pkg delete [ ...] +npm pkg set [[].= ...] +npm pkg set [[].= ...] + +Options: +[-f|--force] [--json] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] + +Run "npm help pkg" for more info + +\`\`\`bash +npm pkg set = [= ...] +npm pkg get [ [ ...]] +npm pkg delete [ ...] +npm pkg set [[].= ...] +npm pkg set [[].= ...] +\`\`\` + +#### \`force\` +#### \`json\` +#### \`workspace\` +#### \`workspaces\` +` + +exports[`test/lib/docs.js TAP usage prefix > must match snapshot 1`] = ` +Display prefix + +Usage: +npm prefix [-g] + +Options: +[-g|--global] + +Run "npm help prefix" for more info + +\`\`\`bash +npm prefix [-g] +\`\`\` + +#### \`global\` +` + +exports[`test/lib/docs.js TAP usage profile > must match snapshot 1`] = ` +Change settings on your registry profile + +Usage: +npm profile enable-2fa [auth-only|auth-and-writes] +npm profile disable-2fa +npm profile get [] +npm profile set + +Options: +[--registry ] [--json] [-p|--parseable] [--otp ] + +Run "npm help profile" for more info + +\`\`\`bash +npm profile enable-2fa [auth-only|auth-and-writes] +npm profile disable-2fa +npm profile get [] +npm profile set +\`\`\` + +#### \`registry\` +#### \`json\` +#### \`parseable\` +#### \`otp\` +` + +exports[`test/lib/docs.js TAP usage prune > must match snapshot 1`] = ` +Remove extraneous packages + +Usage: +npm prune [[<@scope>/]...] + +Options: +[--omit [--omit ...]] [--dry-run] +[--json] [--foreground-scripts] [--ignore-scripts] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +Run "npm help prune" for more info + +\`\`\`bash +npm prune [[<@scope>/]...] +\`\`\` + +#### \`omit\` +#### \`dry-run\` +#### \`json\` +#### \`foreground-scripts\` +#### \`ignore-scripts\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage publish > must match snapshot 1`] = ` +Publish a package + +Usage: +npm publish + +Options: +[--tag ] [--access ] [--dry-run] [--otp ] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] + +Run "npm help publish" for more info + +\`\`\`bash +npm publish +\`\`\` + +#### \`tag\` +#### \`access\` +#### \`dry-run\` +#### \`otp\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +` + +exports[`test/lib/docs.js TAP usage query > must match snapshot 1`] = ` +Retrieve a filtered list of packages + +Usage: +npm query + +Options: +[-g|--global] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] + +Run "npm help query" for more info + +\`\`\`bash +npm query +\`\`\` + +#### \`global\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +` + +exports[`test/lib/docs.js TAP usage rebuild > must match snapshot 1`] = ` +Rebuild a package + +Usage: +npm rebuild [] ...] + +Options: +[-g|--global] [--no-bin-links] [--foreground-scripts] [--ignore-scripts] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--install-links] + +alias: rb + +Run "npm help rebuild" for more info + +\`\`\`bash +npm rebuild [] ...] + +alias: rb +\`\`\` + +#### \`global\` +#### \`bin-links\` +#### \`foreground-scripts\` +#### \`ignore-scripts\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`install-links\` +` + +exports[`test/lib/docs.js TAP usage repo > must match snapshot 1`] = ` +Open package repository page in the browser + +Usage: +npm repo [ [ ...]] + +Options: +[--no-browser|--browser ] [--registry ] +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] + +Run "npm help repo" for more info + +\`\`\`bash +npm repo [ [ ...]] +\`\`\` + +#### \`browser\` +#### \`registry\` +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +` + +exports[`test/lib/docs.js TAP usage restart > must match snapshot 1`] = ` +Restart a package + +Usage: +npm restart [-- ] + +Options: +[--ignore-scripts] [--script-shell ] + +Run "npm help restart" for more info + +\`\`\`bash +npm restart [-- ] +\`\`\` + +#### \`ignore-scripts\` +#### \`script-shell\` +` + +exports[`test/lib/docs.js TAP usage root > must match snapshot 1`] = ` +Display npm root + +Usage: +npm root + +Options: +[-g|--global] + +Run "npm help root" for more info + +\`\`\`bash +npm root +\`\`\` + +#### \`global\` +` + +exports[`test/lib/docs.js TAP usage run-script > must match snapshot 1`] = ` +Run arbitrary package scripts + +Usage: +npm run-script [-- ] + +Options: +[-w|--workspace [-w|--workspace ...]] +[-ws|--workspaces] [--include-workspace-root] [--if-present] [--ignore-scripts] +[--foreground-scripts] [--script-shell ] + +aliases: run, rum, urn + +Run "npm help run-script" for more info + +\`\`\`bash +npm run-script [-- ] + +aliases: run, rum, urn +\`\`\` + +#### \`workspace\` +#### \`workspaces\` +#### \`include-workspace-root\` +#### \`if-present\` +#### \`ignore-scripts\` +#### \`foreground-scripts\` +#### \`script-shell\` +` + +exports[`test/lib/docs.js TAP usage search > must match snapshot 1`] = ` +Search for packages + +Usage: +npm search [search terms ...] + +Options: +[-l|--long] [--json] [--color|--no-color|--color always] [-p|--parseable] +[--no-description] [--searchopts ] [--searchexclude ] +[--registry ] [--prefer-online] [--prefer-offline] [--offline] + +aliases: find, s, se + +Run "npm help search" for more info + +\`\`\`bash +npm search [search terms ...] + +aliases: find, s, se +\`\`\` + +#### \`long\` +#### \`json\` +#### \`color\` +#### \`parseable\` +#### \`description\` +#### \`searchopts\` +#### \`searchexclude\` +#### \`registry\` +#### \`prefer-online\` +#### \`prefer-offline\` +#### \`offline\` +` + +exports[`test/lib/docs.js TAP usage set > must match snapshot 1`] = ` +Set a value in the npm configuration + +Usage: +npm set = [= ...] (See \`npm config\`) + +Run "npm help set" for more info + +\`\`\`bash +npm set = [= ...] (See \`npm config\`) +\`\`\` + +NO PARAMS +` + +exports[`test/lib/docs.js TAP usage set-script > must match snapshot 1`] = ` +Set tasks in the scripts section of package.json, deprecated + +Usage: +npm set-script [