我们需要将Karma测试运行器集成到TeamCity中,为此我想给系统工程师提供小脚本(powershell或其他):
从某个配置文件中选取所需的版本号(我想我可以将其作为评论放在karma.conf.js
)
检查是否在npm的全局仓库中安装了定义版本的karma runner
如果不是,或者安装的版本超出预期版本:选择并安装正确的版本
运行它:karma start .\Scripts-Tests\karma.conf.js --reporters teamcity --single-run
所以我真正的问题是:“如果安装了所需的软件包版本,如何检查脚本?”。您是否应该进行检查,或者每次只能致电npm -g install
安全?
我不想总是检查并安装最新的可用版本,因为其他配置值可能会变得不兼容
答案 0 :(得分:439)
要检查项目中的任何模块是否为“旧”,您应该执行以下操作:
npm outdated
'outdated'将检查package.json中定义的每个模块,并查看NPM注册表中是否有更新的版本。
这是一个示例,显示xml2js(位于当前目录中的node_modules /中)已过时,因为存在较新的版本(0.2.7):
xml2js@0.2.7 node_modules/xml2js current=0.2.6
如果您想检查过时的模块并安装更新的版本,那么您可以:
npm update
(适用于所有模块)或npm update xml2js
(仅检查/更新xml2js)
查看NPM文档:
答案 1 :(得分:315)
npm outdated
将识别应更新的软件包,npm update <package name>
可用于更新每个软件包。但是npm update <package name>
不会更新package.json中的版本,这是一个问题。
最好的工作流程是:
npm update
以安装每个软件包的最新版本查看npm-check-updates
以帮助完成此工作流程。
npm-check-updates
列出哪些包已过期(与运行npm outdated
基本相同)npm-check-updates -u
更新package.json中的所有版本(这是魔法酱)npm update
,根据更新的package.json安装新版本的软件包。答案 2 :(得分:127)
答案 3 :(得分:61)
更新单个本地包:
首先找出你过时的套餐:
npm outdated
然后手动更新您想要的软件包:
npm update --save package_name
这样就无需更新您的本地package.json
文件。
请注意,这会将您的软件包更新为最新版本。
如果您在package.json
文件中写了一些版本,请执行以下操作:
npm update package_name
在这种情况下,您将获得有关您在package.json
文件中编写的版本的下一个稳定版本(想要的)。
使用npm list (package_name)
,您可以找到当地版本的当地版本。
答案 4 :(得分:50)
一个简单的步骤:
$ npm i -g npm-check-updates && ncu -u && npm i
就是这样。 package.json
中的所有软件包版本都是最新版本。
编辑:
这里发生了什么?
安装一个能够为您检查更新的软件包。
使用此软件包更新
package.json
中的所有软件包版本(-a是--updateAll的缩写)。- 醇>
安装所有新版本的软件包。
答案 5 :(得分:7)
答案 6 :(得分:7)
使用以下命令检查节点模块中的过时或漏洞。
npm audit
如果发现任何漏洞,请使用以下命令修复所有问题。
npm audit fix
如果这对您不起作用,请尝试
npm audit fix -f
,此命令几乎可以修复所有漏洞。一些依赖项或devDependencies锁定在 package-lock.json 文件中,因此我们使用-f
标志来强制更新它们。
如果您不想使用强制审核修复程序,则可以通过在 package-lock.json 和 package.json 中进行更改来手动修复依赖项版本。 strong>文件。然后运行`npm update && npm upgrade'
答案 7 :(得分:5)
安装npm软件包(全局或本地)时,可以使用@version
语法定义特定版本,以定义要安装的版本。
换句话说,做:
npm install -g karma@0.9.2
将确保仅安装0.9.2并且如果它已经存在则不会重新安装。
作为建议的一句话,我建议尽可能避免全局npm安装。许多人没有意识到如果依赖项定义了一个bin文件,它就会被安装到./node_modules/.bin/。通常,它非常容易使用package.json中定义的已安装模块的本地版本。实际上,npm脚本会将./node_modules/.bin添加到您的路径中。
作为一个例子,这是一个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的好处,它定义了要使用的karma版本,而不必在CI框中全局保留该配置。
答案 8 :(得分:2)
没有其他软件包,只需检查过时的软件包并更新它们,此命令即可:
npm install $(npm outdated | cut -d' ' -f 1 | xargs -I '$' echo '$@latest' | xargs echo)
答案 9 :(得分:2)
另一种方法是首先使用以下方法升级 package.json 文件
ncu -u
npm install
将所有软件包更新到最新版本。 ps:它会将所有软件包更新到最新版本,但是如果软件包已经是最新版本,则该软件包根本不会受到影响。
答案 10 :(得分:2)
可用于更新所有过时软件包的 3 个简单步骤
首先检查过时的包
sudo npm i -g npm-check-updates
第二,把它们都准备好
ncu -u
终端中的结果将如下所示:
第三,只需更新所有这些。
npm install
就是这样。
答案 11 :(得分:1)
要真正只更新一个软件包,请安装NCU,然后仅对该软件包运行。这将达到真正的最新状态。
npm install -g npm-check-updates
ncu -f your-intended-package-name -u
答案 12 :(得分:1)
还有一个用于 bash:
npm outdated -parseable|cut -d: -f5|xargs -L1 npm i
答案 13 :(得分:0)
从 npm@5.0.0 + 开始,您只需执行以下操作:
npm update <package name>
这将自动更新package.json
文件。我们不必手动更新最新版本,然后使用npm update <package name>
您仍然可以使用
来恢复原来的行为npm update --no-save