我们需要将Karma测试运行器集成到TeamCity中,为此我想给系统工程师一个小脚本(powershell或其他东西):

从一些配置文件中获取所需的版本号(我想我可以把它作为一个注释放在karma.conf.js中) 检查karma runner的定义版本是否安装在npm的全局repo中 如果不是,或者安装的版本比期望的旧:选择并安装正确的版本 \Scripts-Tests\karma.conf.js——reporteteamcity——单次运行

所以我真正的问题是:“如果安装了所需版本的包,如何检入脚本?”你应该做检查,还是每次都调用npm -g install更安全?

我不想总是检查和安装最新的可用版本,因为其他配置值可能变得不兼容


当前回答

当安装npm包(全局或本地)时,你可以通过使用@version语法定义要安装的版本来定义特定的版本。

换句话说,做: NPM install -g karma@0.9.2 将确保只安装0.9.2,如果它已经存在,则不会重新安装。

作为一个建议,我建议尽可能避免全局npm安装。许多人没有意识到,如果一个依赖项定义了一个bin文件,它将被安装到。/node_modules/.bin/。通常,使用package.json中定义的已安装模块的本地版本非常容易。事实上,npm脚本会将。/node_modules/.bin添加到路径中。

作为一个例子,这里有一个包。当我运行npm install && npm test时,将安装我包中定义的karma版本。Json,并在运行测试脚本时使用该版本的karma(安装在node_modules/.bin/karma):

{
 "name": "myApp",
 "main": "app.js",
 "scripts": {
   "test": "karma test/*",
 },
 "dependencies": {...},
 "devDependencies": {
   "karma": "0.9.2"
 }
}

这给了你一揽子的好处。定义karma使用的版本,而不必在CI盒上全局保存该配置。

其他回答

当安装npm包(全局或本地)时,你可以通过使用@version语法定义要安装的版本来定义特定的版本。

换句话说,做: NPM install -g karma@0.9.2 将确保只安装0.9.2,如果它已经存在,则不会重新安装。

作为一个建议,我建议尽可能避免全局npm安装。许多人没有意识到,如果一个依赖项定义了一个bin文件,它将被安装到。/node_modules/.bin/。通常,使用package.json中定义的已安装模块的本地版本非常容易。事实上,npm脚本会将。/node_modules/.bin添加到路径中。

作为一个例子,这里有一个包。当我运行npm install && npm test时,将安装我包中定义的karma版本。Json,并在运行测试脚本时使用该版本的karma(安装在node_modules/.bin/karma):

{
 "name": "myApp",
 "main": "app.js",
 "scripts": {
   "test": "karma test/*",
 },
 "dependencies": {...},
 "devDependencies": {
   "karma": "0.9.2"
 }
}

这给了你一揽子的好处。定义karma使用的版本,而不必在CI盒上全局保存该配置。

bash还有一个:

npm outdated -parseable|cut -d: -f5|xargs -L1 npm i

如果你想把一个包升级到最新版本(主要版本、次要版本和补丁版本),在包名后面加上@latest关键字,例如:

npm i express-mongo-sanitize@latest

这将把express-mongo-sanitize从1.2.1版本更新到2.2.0版本。

如果你想知道哪些包已经过期,哪些包可以更新,可以使用npm expired命令

ex:

$ npm outdated
Package             Current   Wanted  Latest  Location                         Depended by
express-rate-limit    3.5.3    3.5.3   6.4.0  node_modules/express-rate-limit  apiv2
helmet               3.23.3   3.23.3   5.1.0  node_modules/helmet              apiv2
request-ip            2.2.0    2.2.0   3.3.0  node_modules/request-ip          apiv2
validator           10.11.0  10.11.0  13.7.0  node_modules/validator           apiv2

一个简单的步骤:

$ NPM I -g NPM -check-updates && ncu -u && NPM I

仅此而已。所有的包版本在包。Json将是最新的主要版本。

编辑:

这里发生了什么?

正在安装为您检查更新的包。 使用此包更新包中的所有包版本。json (-u是——updateAll的缩写)。 安装所有新版本的包。

NPM expired将识别应该更新的包,NPM update <包名>可以用来更新每个包。但是在npm@5.0.0之前,npm update <包名>将不会更新包中的版本。Json是一个问题。

最佳的工作流程是:

用npm obsolete标识过期的包 更新package.json中的版本 运行npm update来安装每个包的最新版本

查看npm-check-updates来帮助完成这个工作流。

使用npm i npm-check-updates -g安装npm-check-updates 运行npm-check-updates来列出过期的包(基本上和运行npm outdated是一样的) 运行npm-check-updates -u更新包中的所有版本。Json(这是神奇的酱汁) 像往常一样运行npm update,根据更新后的package.json安装新版本的包