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

时间:2013-05-13 15:12:22

标签: node.js teamcity npm karma-runner

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

  1. 从某个配置文件中选取所需的版本号(我想我可以将其作为评论放在karma.conf.js

  2. 检查是否在npm的全局仓库中安装了定义版本的karma runner

  3. 如果不是,或者安装的版本超出预期版本:选择并安装正确的版本

  4. 运行它:karma start .\Scripts-Tests\karma.conf.js --reporters teamcity --single-run

  5. 所以我真正的问题是:“如果安装了所需的软件包版本,如何检查脚本?”。您是否应该进行检查,或者每次只能致电npm -g install安全?

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

14 个答案:

答案 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中的版本,这是一个问题。

最好的工作流程是:

  1. 识别过期套餐
  2. 更新package.json
  3. 中的版本
  4. 运行npm update以安装每个软件包的最新版本
  5. 查看npm-check-updates以帮助完成此工作流程。

    • 安装npm-check-updates
    • 运行npm-check-updates列出哪些包已过期(与运行npm outdated基本相同)
    • 运行npm-check-updates -u更新package.json中的所有版本(这是魔法酱)
    • 照常运行npm update,根据更新的package.json安装新版本的软件包。

答案 2 :(得分:127)

还有一个&#34;新鲜&#34;名为npm-check的模块:

  

NPM-检查

     

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

enter image description here

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

答案 3 :(得分:61)

  • 更新单个本地包:

    1. 首先找出你过时的套餐:

      npm outdated

    2. 然后手动更新您想要的软件包:

      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中的所有软件包版本都是最新版本。

编辑:

这里发生了什么?

  
      
  1. 安装一个能够为您检查更新的软件包。

  2.   
  3. 使用此软件包更新package.json中的所有软件包版本(-a是--updateAll的缩写)。

  4.   
  5. 安装所有新版本的软件包。

  6.   

答案 5 :(得分:7)

检查过时的包裹

npm outdated

检查并选择要更新的软件包

npx npm-check -u

npm oudated img

npx npm-check -u img

答案 6 :(得分:7)

NPM命令来更新或修复某些依赖清单文件中的漏洞

  • 使用以下命令检查节点模块中的过时或漏洞。

      

    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

snapshot of the terminal with the above command 然后简单地运行,

npm install

将所有软件包更新到最新版本。 ps:它会将所有软件包更新到最新版本,但是如果软件包已经是最新版本,则该软件包根本不会受到影响。

答案 10 :(得分:2)

可用于更新所有过时软件包的 3 个简单步骤

首先检查过时的包

sudo npm i -g npm-check-updates

第二,把它们都准备好

ncu -u

终端中的结果将如下所示:

enter image description here

第三,只需更新所有这些。

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

Reference