将所有节点模块的版本号修正为package.json中当前使用的版本号

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

有没有办法做到这一点,而不是一个接一个地手动改变它们?

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

您正在寻找

 npm shrinkwrap 

有关更多信息,请参阅此处的文档 。

它将生成一个npm-shrinkwrap.json与当前版本,它优先于package.json,所以你可以删除该文件和npm update如果你愿意。

UPDATE

下面是一个小脚本,它将package.json的版本从npm-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