我从另一个项目中复制了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脚本可以自动更新:

{
    "_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

其他回答

无需额外软件包的解决方案

将每个依赖项的版本更改为*:

"dependencies": {
    "react": "*",
    "react-google-maps": "*"
  }

然后运行npm update--save。

您的一些软件包已更新,但有些没有更新?

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "*"
  }

这是一个棘手的部分,这意味着你的本地版本“react”比最新版本低。在本例中,npm下载并更新了“react”包。然而,您的本地版本“反应谷歌地图”与最新版本相同。

如果您仍然希望“更新”未更改*,则必须从node_modules文件夹中删除这些模块。

例如删除node_modules/react谷歌地图。

最后再次运行npm更新--save。

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "^4.10.1"
  }

如果您想更新开发依赖项,请不要忘记运行npm update--save dev。

npm过时npm更新

应该会为您提供与应用程序兼容的最新版本。但不是最新版本。

我觉得90%的答案都是“使用npm检查更新”的变体。以下是我所做的(相关代码):

{
  "devDependencies": {
    "updates": "^13.0.5" // the version here could be "latest" or "*" tbh...
  },
  "scripts": {
    "test:dependencies": "updates --update ./",
  }
}

运行npm运行测试:dependencies(或调用依赖项更新脚本)将检查package.json中列出的每个包的最新版本,并让您知道最新版本的发布时间。在那之后运行npm i,您将获得最新信息!

此外,与npm检查更新不同,更新具有零依赖性(在本文发布时,ncu有29个)。

看来npm检查更新是现在实现这一点的唯一方法。

npm i -g npm-check-updates
ncu -u
npm install

在npm<3.11时:

只需将每个依赖项的版本更改为*,然后运行npm-update-save。(注:在最近(3.11)版本的npm中损坏)。

之前:

  "dependencies": {
    "express": "*",
    "mongodb": "*",
    "underscore": "*",
    "rjs": "*",
    "jade": "*",
    "async": "*"
  }

之后:

  "dependencies": {
    "express": "~3.2.0",
    "mongodb": "~1.2.14",
    "underscore": "~1.4.4",
    "rjs": "~2.10.0",
    "jade": "~0.29.0",
    "async": "~0.2.7"
  }

当然,这是更新依赖关系的钝锤。如果像你说的那样,项目是空的,没有什么可以打破,那就好了。

另一方面,如果您正在一个更成熟的项目中工作,那么您可能希望在升级之前验证您的依赖关系中没有发生破坏性变化。

要查看哪些模块过时,只需运行npm过时即可。它将列出所有已安装的具有较新版本的依赖项。

有关特定于纱线的解决方案,请参阅此StackOverflow答案。

目前最简单的方法是使用pnpm而不是npm,只需键入:

pnpm更新--最新

https://github.com/pnpm/pnpm/releases/tag/v3.2.0