【问题标题】:Install only one package from package.json?从 package.json 只安装一个包?
【发布时间】:2021-11-07 17:06:29
【问题描述】:

假设在我的package.json 某处我有:

"dependencies": {
    "bower": "1.0.0",
    // zillion other dependencies
}

有没有办法让我的package.json 中的 npm install only bower@1.0.0?像这样:npm install --only bower

我的目标是让npm installbower install 同时运行。

【问题讨论】:

    标签: npm


    【解决方案1】:

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

    $ node -pe "require('./package').dependencies.bower"
    // → 1.0.0
    $ npm install bower@$(node -pe "require('./package').dependencies.bower")
    // npm install bower@1.0.0
    
    // or with jq
    $ npm install bower@$(< package.json jq -r '.dependencies.bower')
    
    

    -e/--eval 标志评估传递的字符串,-p/--print 打印评估结果。


    ?请考虑其他答案,因为这个答案可能已经过时了。

    【讨论】:

    • 如果有npm-shrinkwrap.json 那么npm install bower 将尊重它的版本。
    • JIC,如果您使用^~,这可能会在不同的次要版本或补丁版本上安装软件包。所以,如果你有package-lock.json,你可以这样做:node -p -e "require('./package-lock.json').dependencies.bower.version"
    • 此解决方案似乎不再适用于至少 npm 版本 6.12.1
    【解决方案2】:

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

    npm install --no-package-lock --no-save bower@1.0.0
    

    这将安装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"
    

    【讨论】:

    • 从 NPM 7.8.0 (GitHub issue) 起不再有效。即使您删除 package-lock.json 并传递您想要的所有参数,npm install local-iso-dt --no-package-lock --production 仍然会在 package.json 中安装所有内容,而不仅仅是零依赖 local-iso-dt 模块。
    猜你喜欢
    • 2016-09-09
    • 2018-09-23
    • 1970-01-01
    • 2023-03-26
    • 2019-10-29
    • 2022-12-13
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    相关资源
    最近更新 更多