从package.json只安装一个包?

Ant*_*hko 10 npm

假设我的某个地方package.json:

"dependencies": {
    "bower": "1.0.0",
    // zillion other dependencies
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让npm安装只能从我的bower@1.0.0 package.json?像这样:npm install --only bower.

我的目标是同时制作npm installbower install运行.

Ant*_*hko 8

作为一种解决方法,您可以使用以下内容:

> node -p -e "require('./package.json').dependencies.bower"
// ? 1.0.0
> npm install bower@`node -p -e "require('./package.json').dependencies.bower"`
// ? npm install bower@1.0.0
Run Code Online (Sandbox Code Playgroud)

其中-e/--evalflag计算传递的字符串并-p/--print打印eval的结果.

  • 如果有 `npm-shrinkwrap.json` 那么 `npm install bower` 会尊重它的版本。 (2认同)
  • 这个解决方案似乎不再适用于至少 npm 版本 6.12.1 (2认同)

Pat*_*tas 7

正如@atalantus 在评论中指出的那样,接受的答案不适用于较新版本的 NPM。较新版本的工作解决方案(在 NPM 6.13.4 上验证)是:

npm install --no-package-lock --no-save bower@1.0.0
Run Code Online (Sandbox Code Playgroud)

这将安装bower及其所有依赖项,但会阻止安装您可能在package.json. 它也不会创建或修改现有的package-lock.json.

从 npm 文档:

--no-package-lock参数将阻止 npm 创建 package-lock.json 文件。当使用 package-lock 的禁用 npm 运行时,安装时不会自动修剪您的节点模块。

--no-save:防止保存到dependencies.

结合 Anton Rudeshko 在 中找出版本的方法package.json,最终的解决方案是:

VERSION_BOWER=`node -p -e "require('./package.json').dependencies.bower"`
npm install --no-package-lock --no-save bower@"$VERSION_BOWER"
Run Code Online (Sandbox Code Playgroud)

  • 从 NPM 7.8.0 开始,这不再有效([GitHub 问题](https://github.com/npm/cli/issues/3023))。即使您删除 `package-lock.json` 并传递所需的所有参数,`npm install local-iso-dt --no-package-lock --product` 仍然会安装 `package.json` 中的所有内容,而不是只有零依赖 [local-iso-dt](https://www.npmjs.com/package/local-iso-dt) 模块。 (3认同)