首页 文章

如何将package.json中的每个依赖项更新为最新版本?

提问于
浏览
1531

我从另一个项目中复制了package.json,现在想要将所有依赖项添加到最新版本中,因为这是一个新项目,如果它破坏了我不介意修复它 .

最简单的方法是什么?

我现在知道的最好的方法是运行 npm info express version 然后手动为每个更新package.json . 肯定有更好的办法 .

{
  "name": "myproject",
  "description": "my node project",
  "version": "1.0.0",
  "engines": {
    "node": "0.8.4",
    "npm": "1.1.65"
  },
  "private": true,
  "dependencies": {
    "express": "~3.0.3", // how do I get these bumped to latest?
    "mongodb": "~1.2.5",
    "underscore": "~1.4.2",
    "rjs": "~2.9.0",
    "jade": "~0.27.2",
    "async": "~0.1.22"
  }
}

我现在是npm-check-updates的合作者,这是解决这个问题的一个很好的解决方案 .

30 回答

  • 26

    npm-check-updates

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

    npm-check-updates允许您将package.json依赖项升级到最新版本,而不管现有的版本限制 .

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

    依赖关系已更新!就这样!

  • 165

    Updtr!

    基于npm过时,updtr安装最新版本并为每个依赖项运行npm test . 如果测试成功,则updtr将新版本号保存到package.json . 但是,如果测试失败,则updtr会回滚其更改 .

    https://github.com/peerigon/updtr

  • 22

    如果使用npm 5和节点8,请尝试以下命令

    npm update --save

  • 10

    看起来npm-check-updates是现在实现这一目标的唯一方法 .

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

    在npm <3.11:

    只需将每个依赖项的版本更改为 * ,然后运行 npm update --save . ( Note: broken in recent (3.11) versions of 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 outdated . 它将列出任何已安装的具有较新版本的依赖项 .

  • 0

    要查看哪些软件包具有更新的版本,请使用以下命令:

    npm outdated
    

    只更新 one 依赖只需使用以下命令:

    npm install yourPackage@latest --save
    

    例如:

    我的 package.json 文件具有依赖性:

    "@progress/kendo-angular-dateinputs": "^1.3.1",
    

    那我应该写:

    npm install @progress/kendo-angular-dateinputs@latest --save
    
  • 312

    回复非常晚 . 但可以帮助别人 .

    此功能已在 npm v5 中引入 . 使用 npm install -g npm@latest 和更新到npm

    更新 package.json

    • 删除 /node_modulespackage-lock.json (if you have any)

    • 运行 npm update . 这将基于semver将依赖关系package.json更新为最新版本 .

    更新到最新版本 . 你可以去 npm-check-updates

  • 5

    我必须用于更新 package.json for NPM 3.10.10 的命令:

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

    背景:

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

    声明的版本范围满足以下依赖关系,但已安装的版本落后 . 您可以使用npm update在不修改软件包文件的情况下安装最新版本 . 如果您想要更新包文件中的依赖项,请运行ncu -a .

    阅读npm-check-updates的文档,您可以看到差异:

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

    -u, - upgrade:覆盖包文件-a, - upgradeAll:包括那些最新版本满足声明的semver依赖的依赖项

    ncu是 npm-check-updates 的别名,如输入 npm-check-updates -u 时在消息中看到的:

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

    TLDR; (针对较新的NPM版本更新)

    事情已经发生了一些变化,因为这些答案最初是写的 .

    npm 2:npm过时npm update npm shrinkwrap

    较旧的npm:npm-check-updates包npm shrinkwrap

    一定要收缩你的deps,否则你可能会结束一个死的项目 . 我前几天拿出了一个项目而且它不会运行,因为我的deps已经过时/更新/乱七八糟 . 如果我收缩包装,npm就会安装我需要的东西 .


    详情

    对于那些做到这一点的好奇者,我推荐这里:

    使用npm-check-updates或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 -rf node_modules
    $ npm install
    

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

    $ rm npm-shrinkwrap.json
    $ npm shrinkwrap
    

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

    如果你检查 npm-shrinkwrap.json 到git,所有安装将使用完全相同的版本 .

    这是一种从开发过渡(所有更新,一直)到 生产环境 (没有人接触任何东西)的方法 .

  • 8

    我使用 npm-check 来存档 .

    npm i -g npm npm-check
    npm-check -ug #to update globals
    npm-check -u #to update locals
    

    另一个有用的命令列表,它将保留 package.json 中的确切版本号

    npm cache clean
    rm -rf node_modules/
    npm i -g npm npm-check-updates
    ncu -g #update globals
    ncu -ua #update locals
    npm i
    
  • 42

    我真的很喜欢npm-upgrade的作品 . 它是一个简单的命令行实用程序,它遍历所有依赖项,并允许您查看当前版本与最新版本的比较,并根据需要进行更新 .

    以下是在项目根目录( package.json 文件旁边)中运行 npm-upgrade 后发生的情况的屏幕截图:

    对于每个依赖您可以选择升级,忽略,查看更改日志或完成此过程 . 到目前为止,它对我来说非常有用 .

  • 24

    Solution without additional packages

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

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

    然后运行 npm update --save .

    你的一些软件包已更新,但有些不是?

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

    这是棘手的部分,这意味着你的本地版本“反应”低于最新版本 . 在这种情况下,npm下载并更新了“react”包 . 但是,您当地版本的“react-google-maps”与最新版本相同 .

    如果您仍希望"update"未更改 * ,则必须从 node_modules 文件夹中删除这些模块 .

    例如删除 node_modules/react-google-maps .

    终于再次运行 npm update --save .

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

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

  • 3

    Ncu是检查更新的新别名 . 通过这样做,您不必手动更新package.json中的版本号.ncu为您做到了 . 如果您使用的是Linux计算机,请按照以下方法操作

    sudo npm i -g npm-check-updates
    //在-u或-a之间决定
    ncu -u, - upgrade和overwrite包文件
    ncu -a, - upgrade甚至包括那些最新的依赖项
    version满足声明的服务器依赖性
    sudo npm install

  • 1

    我通过查看https://github.com/tjunnone/npm-check-updates的说明解决了这个问题

    $ npm install -g npm-check-updates
    $ ncu
    $ ncu -u # to update all the dependencies to latest
    $ ncu -u "specific module name"  #in case you want to update specific dependencies to latest
    
  • 2

    替代方案是

    "dependencies":{
        "foo" : ">=1.4.5"
    }
    

    每次使用npm update时,它都会自动更新到最新版本 . 有关更多版本的语法,您可以在此处查看:https://www.npmjs.org/doc/misc/semver.html

  • 4

    这适用于npm 1.3.15 .

    "dependencies": {
      "foo": "latest"
    }
    
  • 8

    如果您碰巧使用Visual Studio Code作为您的IDE,这是一个有趣的小扩展,可以一键更新 package.json .

    版本Lense

  • 5

    以下代码(已被接受)给我写了一些类似“它需要太长时间的等等”并且什么也没做 . 可能使用全球旗帜是问题,idk .

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

    我决定使用我的文本编辑器,而是采用半手动方法 .

    我从我的 package.json 的dev依赖项复制了一个这样的列表(只是更长)到记事本文本编辑器:

    "browserify": "10.2.6",
    "expect.js": "^0.3.1",
    "karma": "^0.13.22",
    "karma-browserify": "^5.2.0",
    

    我将搜索模式设置为正则表达式,使用 ^\s*"([^"]+)".*$ 模式获取包名称并将其替换为 npm uninstall \1 --save-dev \nnpm install \1 --save-dev . 单击"replace all" . 输出是这样的:

    npm uninstall browserify --save-dev 
    npm install browserify --save-dev
    npm uninstall expect.js --save-dev 
    npm install expect.js --save-dev
    npm uninstall karma --save-dev 
    npm install karma --save-dev
    npm uninstall karma-browserify --save-dev 
    npm install karma-browserify --save-dev
    

    我把它复制回bash并点击回车 . 一切都升级,工作正常 . 就这样 .

    "browserify": "^16.1.0",
    "expect.js": "^0.3.1",
    "karma": "^2.0.0",
    "karma-browserify": "^5.2.0",
    

    我不认为这是一个大问题,因为你必须时不时地做,但你可以轻松编写一个脚本,解析 package.json 并升级你的包 . 我认为这样做更好,因为如果你需要特殊的东西,你可以编辑你的列表,例如保留当前版本的lib .

  • 35

    如果您使用 yarnyarn upgrade-interactive是一个非常时尚的工具,可以让您查看过时的依赖项,然后选择您要更新的依赖项 .

    使用Yarn的更多理由超过 npm . 嘿 .

  • 55

    要将 one 依赖项更新为其最新版本而无需手动打开 package.json 并进行更改,您可以运行

    npm install {package-name}@* {save flags?}
    

    npm install express@* --save
    

    供参考,npm-install


    正如用户Vespakoen在拒绝编辑时指出的那样,也可以通过这种方式一次更新多个包:

    npm install --save package-nave@* other-package@* whatever-thing@*
    

    他还根据 npm outdated 为shell选择了一个单行程 . 有关代码和说明,请参阅the edit .


    PS:我也讨厌为这样的事情手动编辑 package.json ;)

  • 6

    Greenkeeper如果你正在使用Github . https://greenkeeper.io/

    这是一个Github集成,非常容易设置 . 安装后,它会自动在您指定的存储库中创建拉取请求(或者如果需要,则自动创建拉取请求),并使代码始终保持最新,而不必强制您手动执行任何操作 . 然后PR应该触发CI服务的构建,并且根据成功或失败的检查,您可以继续确定触发问题的原因或CI通过时只是合并PR .

    在底部,您可以看到第一个构建首先失败并且在提交之后(“升级到节点v6.9”)测试通过,所以我最终可以合并PR . 也有许多表情符号 .

    另一种选择是https://dependencyci.com/,但我没有对其进行密集测试 . 在第一次看之后,Greenkeeper在一般的IMO中看起来更好,并且具有更好的集成 .

  • 2

    这是我将 package.json 中的所有依赖项更新为最新版本所做的操作:

    npm install -g npm-check-updates
    ncu -u --packageFile package.json
    
  • 1835

    一个简单的步骤:

    $ npm install -g npm-check-updates && ncu -a && npm i
    
  • 885
    • npm已过时

    • npm更新

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

  • 1
    • 使用 * 作为最新版本的版本,包括unstable

    • 使用 latest 作为最新稳定版本的版本定义

    • 使用LatestStablePackages修改package.json,其中包含最新的稳定版本号

    这是一个例子:

    "dependencies": {
            "express": "latest"  // using the latest STABLE version
        ,   "node-gyp": "latest"    
        ,   "jade": "latest"
        ,   "mongoose": "*" // using the newest version, may involve the unstable releases
        ,   "cookie-parser": "latest"
        ,   "express-session": "latest"
        ,   "body-parser": "latest"
        ,   "nodemailer":"latest"
        ,   "validator": "latest"
        ,   "bcrypt": "latest"
        ,   "formidable": "latest"
        ,   "path": "latest"
        ,   "fs-extra": "latest"
        ,   "moment": "latest"
        ,   "express-device": "latest"
    },
    
  • 7

    上述命令不安全,因为切换版本时可能会破坏模块 . 相反,我推荐以下内容

    • 使用 npm shrinkwrap 命令将实际当前节点模块版本设置为package.json .

    • 将每个依赖项更新到最新版本如果它不使用https://github.com/bahmutov/next-update命令行工具打破您的测试

    npm install -g next-update
    // from your package
    next-update
    
  • 2

    npm-check-updates 是一个实用程序,可以使用所有依赖项的最新版本自动调整package.json

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

    $ npm install -g npm-check-updates
    $ ncu -u
    $ npm install
    
  • 12

    我发现上面最好的答案唯一的警告是它将模块更新到最新版本 . 这意味着它可以更新为不稳定的alpha版本 .

    我会使用npm-check-updates实用程序 . 我的小组使用了这个工具,它通过安装稳定的更新有效地工作 .

    正如Etienne所说:安装并运行:

    $ npm install -g npm-check-updates
    $ npm-check-updates -u
    $ npm install
    
  • 12

    如果使用yarn,则以下命令将所有包更新为其最新版本:

    yarn upgrade --latest

    从他们的docs

    升级--latest命令升级软件包与升级命令相同,但忽略package.json中指定的版本范围 . 相反,将使用由最新标记指定的版本(可能在主要版本之间升级包) .

  • 0

    这是一个匹配语义版本号的基本正则表达式,因此您可以使用星号快速替换它们 .

    语义版本正则表达式

    ([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
    

    如何使用

    在JSON文件中选择要替换的软件包版本 .

    输入上面的正则表达式并验证它是否与正确的文本匹配 .

    用星号替换所有匹配项 .

    运行 npm update --save

  • 6

    我最近不得不更新几个使用npm和package.json作为gruntfile.js魔法的项目 . 以下bash命令(多行命令)对我很有用:

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

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

    以上是在机器运行中对我有用的东西:node = 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 key devDependancies 内的package.json中,这是我的项目的要求,很可能不是你的 .

    之后我会检查一切都很简单

    npm outdated --depth=0
    

    此外,您可以使用以下方法检查当前的顶级已安装库版本

    npm list --depth=0
    

相关问题