如果需要,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。