如果需要,npm检查并更新软件包

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

  1. 从一些configuration文件中获取所需的版本号(我想我可以把它作为一个注释权在karma.conf.js

  2. 检查是否在npm的全球回购安装了定义版本的业力运行者

  3. 如果不是,或者安装的版本比预期的要旧,请select并安装正确的版本

  4. 运行它: 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程是:

  1. 识别过期的软件包
  2. 更新你的package.json中的版本
  3. 运行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-检查

检查过时的,不正确的和未使用的依赖关系。

在这里输入图像说明

它还提供了一种方便的交互方式来更新依赖关系。

  • 要更新一个本地包:

    1. 先找出你过时的包裹:

      npm outdated

    2. 然后手动更新一个或多个软件包,如下所示:

      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。

Interesting Posts