我们需要将 Karma 测试运行程序集成到 TeamCity 中,为此我想给 sys-engineers 小脚本(powershell 或其他),它会:
从某个配置文件中获取所需的版本号(我想我可以将其作为注释放在 karma.conf.js 中)检查是否在 npm 的全局 repo 中安装了定义的 karma runner 版本,如果不是,或者安装的版本是比期望的旧:选择并安装正确的版本运行它: karma start .\Scripts-Tests\karma.conf.js --reporters teamcity --single-run
所以我真正的问题是:“如果安装了所需的软件包版本,如何签入脚本?”。您应该进行检查,还是每次都调用 npm -g install
是安全的?
我不想总是检查和安装最新的可用版本,因为其他配置值可能会变得不兼容
要检查项目中的任何模块是否“旧”:
npm outdated
“outdated”将检查 package.json
中定义的每个模块,并查看 NPM 注册表中是否有更新的版本。
例如,假设 xml2js 0.2.6
(位于当前项目的 node_modules
中)已过时,因为存在较新的版本 (0.2.7)。你会看到:
xml2js@0.2.7 node_modules/xml2js current=0.2.6
对于update所有依赖项,如果您确信这是可取的:
npm update
或者,要更新单个依赖项,例如 xml2js
:
npm update xml2js
要更新 package.json
版本号,请附加 --save
标志:
npm update --save
npm outdated
将识别应更新的软件包,npm update <package name>
可用于更新每个软件包。但是在 npm@5.0.0 之前,npm update <package name>
不会更新 package.json 中的版本,这是一个问题。
最好的工作流程是:
识别过期包更新 package.json 中的版本运行 npm update 以安装每个包的最新版本
查看 npm-check-updates
以帮助完成此工作流程。
安装 npm-check-updates
运行 npm-check-updates 以列出哪些包已过期(与运行 npm outdated 基本相同)
运行 npm-check-updates -u 来更新你的 package.json 中的所有版本(这是神奇的酱汁)
像往常一样运行 npm update 以根据更新的 package.json 安装新版本的包
npm outdated
将显示所有包.. 即使在其他包中.. 但这些包不会通过此过程更新,因此它们将始终出现.. 所以只需使用 npm-check-updates
(如您实际推荐的那样),它仅显示来自的主要包package.json
...这是相关的
npm install --all-outdated
一样简单,但它不是......
npm update --save package_name
以保存对 package.json 的最新更改。
还有一个名为 npm-check
的“新鲜”模块:
npm-check 检查过时、不正确和未使用的依赖项。
https://i.stack.imgur.com/InFAV.png
它还提供了一种方便的交互式方式来使用 npm-check -u
更新依赖项。
一个简单的步骤:
$ npm i -g npm-check-updates && ncu -u && npm i
就这些。 package.json
中的所有软件包版本都是最新的主要版本。
编辑:
这里发生了什么?
安装为您检查更新的软件包。使用此包更新 package.json 中的所有包版本(-u 是 --updateAll 的缩写)。安装所有新版本的软件包。
npx -p npm-check-updates ncu -u
更新单个本地包:首先找出你过时的包:npm outdated 然后手动更新你想要的包:npm update --save package_name
首先找出你过时的包:npm outdated
然后手动更新您想要的一个或多个包: npm update --save package_name
这样就无需更新您的本地 package.json
文件。
请注意,这会将您的软件包更新到最新版本。
如果您在 package.json 文件中编写某个版本并执行以下操作: npm update package_name 在这种情况下,您将获得关于您在 package.json 文件中编写的版本的下一个稳定版本(想要的)。
使用 npm list (package_name)
,您可以找到本地软件包的当前版本。
您可以尝试以下任一选项:
检查过时的软件包 npm outdated 检查并选择要更新的软件包 npx npm-check -u
npm-check
太棒了,谢谢分享!
没有额外的包,只检查过时的并更新那些,这个命令会做:
npm install $(npm outdated | cut -d' ' -f 1 | sed '1d' | xargs -I '$' echo '$@latest' | xargs echo)
用于更新或修复某些依赖清单文件中的漏洞的 NPM 命令
使用以下命令检查节点模块中的过时或漏洞。 npm 审计
如果发现任何漏洞,请使用以下命令修复所有问题。 npm 审计修复
如果它对您不起作用,请尝试 npm audit fix -f,此命令几乎可以修复所有漏洞。一些依赖或 devDependencies 被锁定在 package-lock.json 文件中,所以我们使用 -f 标志来强制更新它们。
如果您不想使用强制审计修复,那么您可以通过在 package-lock.json 和 package.json 文件中更改依赖项版本来手动修复它们。然后运行
npm update && npm upgrade
npm audit fix --force
。现在我比以前有更多的漏洞。我可以再次运行它,但它不会改变。怎么办?
在安装 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 定义要使用的业力版本,而不必将该配置全局保存在 CI 框上。
test
脚本中有什么?你能告诉我你是如何用脚本安装它的吗?
npm test
时运行的命令。 npm 文档在这里非常好:npmjs.org/doc/scripts.html
从 npm@5.0.0+ 开始,您可以简单地执行以下操作:
npm update <package name>
这将自动更新 package.json
文件。我们不必手动更新最新版本然后使用 npm update <package name>
您仍然可以使用
npm update --no-save
npm@7.21.1
,但它不会自动更新我的 package.json
。运行 npm update <package name> --save
也没有帮助!
另一种方法是首先使用升级 package.json 文件,
ncu -u
https://i.stack.imgur.com/mH2f1.png
npm install
将所有软件包更新到最新版本。 ps:它会将所有软件包更新到最新版本,但是如果软件包已经是最新的,则该软件包根本不会受到影响。
3 个简单的步骤可用于更新所有过时的软件包
首先,检查过时的包
sudo npm i -g npm-check-updates
二、把它们都准备好
ncu -u
终端中的结果将如下所示:
https://i.stack.imgur.com/3ySIe.png
第三,只需更新所有这些。
npm install
而已。
只需执行此操作即可将所有内容更新到最新版本 - npx npm-check-updates -u
注意 - 系统会提示您安装 npm-check-updates
。按 y
并输入。
现在运行 npm i
。你可以走了。
要真正更新一个包,请安装 NCU,然后仅为该包运行它。这将碰到真正的最新消息。
npm install -g npm-check-updates
ncu -f your-intended-package-name -u
bash 的另一个:
npm outdated -parseable|cut -d: -f5|xargs -L1 npm i
我只是对使用 package.json
中的语义版本控制规则更新过时的包感兴趣。
这是一个可以解决这个问题的单线器
npm update `npm outdated | awk '{print $1}' | tr '\n' ' '`
它能做什么:
从 npm outdated 获取输出并将其通过管道传输到 awk 中,我们只获取包的名称(在第 1 列中),然后我们使用 tr 最终将换行符转换为空格 - 使用反引号 - 我们正在使用前面步骤的输出作为 npm update 的参数,因此我们可以一次性获得所有需要的更新。
有人会认为有一种方法可以单独使用 npm
,但是当我查看时它不在这里,所以我只是把它放在这里以防它对任何人有帮助😀。
** 我相信 MikeMajara 在此处提供了一个类似的答案,但它会将 @latest
附加到更新的包名称中,作为我定期更新的一部分,我对此并不真正感兴趣。
如果要将软件包升级到最新版本(主要、次要和补丁),请将 @latest
关键字附加到软件包名称的末尾,例如:
npm i express-mongo-sanitize@latest
这会将 express-mongo-sanitize 从版本 1.2.1 更新到版本 2.2.0。
如果您想知道哪些软件包已过时以及哪些可以更新,请使用 npm outdated
命令
前任:
$ 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 update
尤其是npm update -g
...它不是大多数人期望它做的!请参阅:github.com/npm/npm/issues/6247 和 gist.github.com/othiym23/4ac31155da23962afd0enpm -g update
可以再次安全使用。 github.com/npm/npm/issues/6247#issuecomment-92182814As of npm@5.0.0, 'npm update' will change package.json to save the new version as the minimum required dependency
docs.npmjs.com/cli/update.htmlnpm update
,它破坏了所有代码;幸运的是我在这样做之前备份了我的文件