我从另一个项目中复制了package.json,现在想将所有依赖项都升级到最新版本,因为这是一个新项目,如果出现问题,我不介意修复。

最简单的方法是什么?

我知道的最好的方法是运行npm info express版本,然后手动更新package.json中的每个依赖项。一定有更好的办法。

{
  "name": "myproject",
  "description": "my node project",
  "version": "1.0.0",
  "dependencies": {
    "express": "^3.0.3", // how do I get these bumped to latest?
    "mongodb": "^1.2.5",
    "underscore": "^1.4.2"
  }
}

有关纱线特定的解决方案,请参阅本堆栈溢出线程。


当前回答

为npm v2更新+

npm 2+(节点0.12+):


npm outdated
npm update
git commit package-lock.json

古代npm(约2014年):

npm install -g npm-check-updates
npm-check-updates
npm shrinkwrap
git commit package-lock.json

一定要收缩你的部门,否则你可能会导致一个失败的项目。前几天我做了一个项目,但它无法运行,因为我的部门都过时了/更新了/一团糟。如果我收缩,npm就会安装我所需要的东西。


细节

对于走到这一步的好奇者,我推荐如下:

使用npm检查更新或npm过时来建议最新版本。

# `outdated` is part of newer npm versions (2+)
$ npm outdated
# If you agree, update.  
$ npm update

#       OR

# Install and use the `npm-check-updates` package.
$ npm install -g npm-check-updates
# Then check your project
$ npm-check-updates
# If you agree, update package.json.
$ npm-check-updates -u

###然后进行一次干净的安装(没有rm,我收到了一些依赖性警告)

$ rm -rf node_modules
$ npm install 

最后,使用npm-shrinkwrap将精确版本保存到npm-shrykwrap.json

$ rm npm-shrinkwrap.json
$ npm shrinkwrap

现在,npm安装将使用npm-shrinkwrap.json中的精确版本

如果将npm-shrinkwrap.json签入git,则所有安装都将使用完全相同的版本。

这是一种从开发(所有更新,所有时间)过渡到生产(无人接触任何东西)的方法。

npm过时npm检查更新npm包络线

p.s.Yarn正在将您的包裹列表发送到Facebook。

其他回答

我最近不得不更新几个使用npm和package.json实现gruntfile.js魔法的项目。以下bash命令(多行命令)对我来说效果很好:

npm outdated --json --depth=0 | \
jq --ascii-output --monochrome-output '. | keys | .[]' | \
xargs npm install $1 --save-dev

这里的想法是:将npm过时的输出作为json传输到jq(jq是一个json命令行解析器/查询工具)(注意npm过时时使用--depth参数)jq将仅将输出剥离到顶级包名称。最后xargs将每个LIBRARYNAME一次一个放入npm install LIBRARYNAME--save dev命令

以上是我在机器运行时所做的工作:节点=v0.11.10 osx=10.9.2 npm=1.3.24

这需要:xargs公司http://en.wikipedia.org/wiki/Xargs(我相信是我的机器固有的)和jq公司http://stedolan.github.io/jq/(我用brew install jq安装了它)

注意:我只使用--save-dev将更新的库保存到json键devDependencies中的package.json,这是我的项目的要求,很可能不是你的。

之后,我用一个简单的

npm outdated --depth=0

此外,您可以使用

npm list --depth=0

如果您使用的是yarn,yarn升级交互是一个非常时髦的工具,可以让您查看过时的依赖项,然后选择要更新的依赖项。

更多理由使用纱线代替npm。呵呵。

用于更新NPM 3.10.10的package.json的命令:

npm install -g npm-check-updates
ncu -a
npm install

背景:

我使用的是@josh3736的最新命令,但我的package.json没有更新。然后,在运行npm检查更新-u时,我注意到了描述文本:

以下依赖性通过其声明的版本范围来满足,但安装的版本落后。您可以安装最新的版本,而无需使用npm更新来修改包文件。如果如果仍要更新包文件中的依赖项,请运行ncu-a。

阅读npm检查更新的文档,您可以看到不同之处:

https://www.npmjs.com/package/npm-check-updates

-u、 --升级:覆盖包文件-a、 --upgradeAll:甚至包括最新版本满足声明的semver依赖项的依赖项

ncu是npm check updates的别名,如键入npm check update-u时的消息所示:

[INFO]: You can also use ncu as an alias

在2023年,我简单地使用了:

$npm更新

许多软件包都在此时更新,但您可能会收到一条消息,其中一些需要修复。在这种情况下,我跑了:

$npm审计修复--强制

最后,为了确保它已全部安装,我运行

$npm安装

就是这样,我的包更新了。无需手动编辑配置文件。

NPM脚本可以自动更新:

{
    "_cmd-update-modules": "npm run devops-update-modules",
    "scripts": {
        "create-global-node-modules-folder": "if not exist \"%appdata%\\npm\\node_modules\" mkdir %appdata%\\npm\\node_modules",
        "npm-i-g": "npm i npm@latest -g",
        "npm-check-i-g": "npm i npm-check@latest -g",
        "eslint-i-g": "npm i eslint@latest -g",
        "npm-check-u-l": "npm-check \"C:\\Program Files\\nodejs\\node_modules\\npm\" -y",
        "npm-check-u-g": "npm-check \"C:\\Program Files\\nodejs\\node_modules\\npm\" -y -g",
        "npm-deep-update-l": "npm update --depth 9999 --dev",
        "npm-deep-update-g": "npm update --depth 9999 --dev -g",
        "npm-cache-clear": "npm cache clear --force",
        "devops-update-modules": "npm run create-global-node-modules-folder && npm run npm-i-g && npm run npm-check-i-g && npm run eslint-i-g && npm run npm-check-u-l && npm run npm-check-u-g && npm run npm-deep-update-l && npm run npm-deep-update-g && npm run npm-cache-clear"
    }
}

有关详细信息和分步手册:https://stackoverflow.com/a/34295664