【问题标题】:Fix all node modules' version numbers to the currently using ones in package.json将所有节点模块的版本号修复为 package.json 中当前使用的版本号
【发布时间】:2016-01-24 05:26:57
【问题描述】:

目前,package.json 中的所有节点模块都使用* 作为版本号,我的应用程序与这些节点模块相当稳定,所以我想在 package.json 中修复它们的版本号,以便我可以运行npm install在其他地方安装预期版本的节点模块。

有没有办法快速完成而不是手动一个一个地改变它们?

比如一些控制台命令,npm fixversion module_a module_b ...?

【问题讨论】:

    标签: node.js package.json


    【解决方案1】:

    你在寻找

    npm shrinkwrap
    

    更多信息请参见the documentation here

    它将使用当前版本生成一个 npm-shrinkwrap.json,它优先于 package.json,因此您可以根据需要删除该文件和 npm update

    更新

    这是一个小脚本,它将package.jsonnpm-shrinkwrap.json 中的版本一起写入一个新文件package-lockdown.json

    var fs = require('fs');
    var p = JSON.parse( fs.readFileSync( 'package.json') );
    var v = JSON.parse( fs.readFileSync( 'npm-shrinkwrap.json') );
    
    updateDependencies( p.dependencies,    v.dependencies );
    updateDependencies( p.devDependencies, v.dependencies );
    
    fs.writeFileSync( 'package-lockdown.json', JSON.stringify( p, null, 2 ) );
    
    function updateDependencies( list, v )
    {
            for ( var d in list )
                    list[d] = v[d].version;
    }
    

    上述脚本也会更新devDependencies,因此请务必在运行脚本之前删除该行或运行npm shrinkwrap --dev

    【讨论】:

    • 谢谢,它与我想要的类似,但它也给了我使用的模块所依赖的包。例如我正在使用依赖于module_bmodule_anpm-shrinkwrap.json 将同时包含module_amodule_b,以防我只想要module_a
    • 我添加了一个小脚本来做你想做的事,但它是非标准的,因此需要自定义脚本。预计 npm-shrinkwrap.json 包含传递依赖版本,因为如果module_amodule_b 指定版本范围,并且module_b 获得了新版本,那么运行npm install 的人将不会得到完全相同的版本包。
    猜你喜欢
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 2015-10-10
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    相关资源
    最近更新 更多