如果需要,npm检查并更新软件包
我们需要将Karmatesting运行器集成到TeamCity中,为此我想给系统工程师一个小脚本(powershell或其他),它们将:
- 
从一些configuration文件中获取所需的版本号(我想我可以把它作为一个注释权在 karma.conf.js)
- 
检查是否在npm的全球回购安装了定义版本的业力运行者 
- 
如果不是,或者安装的版本比预期的要旧,请select并安装正确的版本 
- 
运行它: karma start .\Scripts-Tests\karma.conf.js --reporters teamcity --single-run
 所以我真正的问题是:“如果需要安装软件包的版本,如何检查脚本?”。 你应该做这个检查吗,或者每次调用npm -g install安全的。 
我不想总是检查并安装最新的可用版本,因为其他configuration值可能会变得不兼容
要检查项目中的任何模块是否“老”,你应该这样做:
 npm outdated 
'过时'将检查package.json中定义的每个模块,并查看NPMregistry中是否有更新的版本。
下面是一个示例,显示xml2js(位于当前目录中的node_modules /中)已过时,因为存在较新的版本(0.2.7):
 xml2js@0.2.7 node_modules/xml2js current=0.2.6 
 如果你想检查过时的模块,并安装新版本,那么你可以做: npm update (所有模块)或npm update xml2js (只检查/更新xml2js) 
看看NPM文档:
  npm outdated将识别应该更新的软件包,并且可以使用npm update <package name>来更新每个软件包。 但是npm update <package name>不会更新package.json中的版本,这是一个问题。 
最好的工作stream程是:
- 识别过期的软件包
- 更新你的package.json中的版本
-  运行npm update来安装每个软件包的最新版本
 查看npm-check-updates来帮助完成这个工作stream程。 
- 安装npm-check-updates
-  运行npm-check-updates来列出哪些软件包已过期(基本上和运行npm outdated)
-  运行npm-check-updates -u更新package.json中的所有版本(这是魔术酱)
-  像平常一样运行npm update,根据更新后的package.json安装新版本的软件包
 还有一个名为npm-check的“新鲜”模块: 
NPM-检查
检查过时的,不正确的和未使用的依赖关系。

它还提供了一种方便的交互方式来更新依赖关系。
- 
要更新一个本地包: - 
先找出你过时的包裹: npm outdated
- 
然后手动更新一个或多个软件包,如下所示: npm update --save package_name
 
- 
 这样就没有必要更新你的本地package.json文件。 
请注意,这将更新您的包到最新版本。
- 
如果你在你的 package.json文件中写一些版本,并执行:npm update package_name在这种情况下,您将获得关于您在 package.json文件中编写的版本的下一个稳定版本(想要的)。
 通过npm list (package_name)你可以find当前版本的本地软件包。 
一个简单的步骤:
 $ npm i -g npm-check-updates && ncu -a && npm i 
 就这些。  package.json所有包版本将是最新的。 
 安装npm包(全局或本地)时,可以使用@version语法定义要安装的版本,以定义特定的版本。 
 换句话说,执行: npm install -g karma@0.9.2将确保只安装了0.9.2,如果它已经存在,将不会重新安装。 
作为一个build议的话,我会build议避免全球npm安装在任何地方。 许多人没有意识到,如果一个依赖项定义了一个bin文件,它将被安装到./node_modules/.bin/。 通常,它非常易于使用在package.json中定义的已安装模块的本地版本。 事实上,npm脚本会将./node_modules/.bin添加到您的path中。
 作为一个例子,这里是一个package.json,当我运行npm install && npm test将安装在我的package.json中定义的karma版本,并使用该版本的karma(安装在node_modules / .bin / karma)运行test脚本: 
 { "name": "myApp", "main": "app.js", "scripts": { "test": "karma test/*", }, "dependencies": {...}, "devDependencies": { "karma": "0.9.2" } } 
这给了你的package.json好处,定义了要使用的业力版本,而不必在CI框上全局保留这个configuration。