从命令行更新具有固定依赖项的npm包

从命令行更新具有固定依赖项的npm包,npm,Npm,我有一个npm软件包,固定版本有更新。 示例package.json摘录: devDependencies: { "someFixedVersionPackage": "1.0.0", //1.1.0 is latest "anotherFixedVersionPackage": "2.3.2", //2.3.4 is latest } 是否存在安装该包的最新版本并更新package.json(最好是一次更新所有包)的npm命令 为了清楚起见,我希望上面的package.json片

我有一个npm软件包,固定版本有更新。
示例package.json摘录:

devDependencies: {
   "someFixedVersionPackage": "1.0.0", //1.1.0 is latest
   "anotherFixedVersionPackage": "2.3.2", //2.3.4 is latest
}
是否存在安装该包的最新版本并更新package.json(最好是一次更新所有包)的npm命令

为了清楚起见,我希望上面的package.json片段除了更新包本身之外,还更新为:

devDependencies: {
   "someFixedVersionPackage": "1.1.0", //latest
   "anotherFixedVersionPackage": "2.3.4", //latest
}
谢谢。

为什么npm更新不在这里工作? 根据以下文件:

此命令将根据semver将列出的所有包更新为最新版本(由标记配置指定)

它还将安装丢失的软件包。与安装软件包的所有命令一样,--dev标志也将导致处理devdependency

由于您的包是使用固定版本定义的,因此“更新”子命令不会更新这些包。因此,只有在为每个包指定更大的版本范围时,它才会自动更新包。请注意,在npm项目中,通常会指定一个宽松版本;一种旨在避免破坏更改但仍有改进和修复空间的方法

不过,为什么我不应该在package.json中修复依赖项版本呢? 但它们是固定的,因为我非常想要它们。在测试了较新的版本之后,我想通过创建的命令行更新它们

拥有具有固定版本的依赖项列表并不意味着安装的依赖项总是相同的,因为您的依赖项的依赖项很可能也会使用版本范围定义。为了跟踪已测试版本标记的依赖项列表,npm提供了另一种机制:

在npm版本5之前,您可以使用
shrinkwrap
命令创建一个“npm shrinkwrap.json”文件:

npm收缩包装

此命令锁定程序包依赖项的版本,以便您可以准确控制安装程序包时将使用每个依赖项的哪个版本

自NPM5以来,当npm操作修改“node_modules”树或“package.json”时,会自动生成“package lock.json”

与修改package.json不同,这些包锁中的任何一个都将覆盖
npm install
的默认行为,即在创建或手动更新依赖项时使用锁指定的版本安装依赖项。这样一来,您的依赖项现在就可以扩展,而不会有依赖项安装未经测试的包版本的风险

包覆面提取用于发布包。要对包进行收缩包装,请执行以下操作:

  • 在包根目录中运行
    npm install
    ,以安装所有依赖项的当前版本
  • 验证软件包在这些版本中是否按预期工作
  • 运行
    npm shrinkwrap
    ,将npm-shrinkwrap.json添加到git,然后发布包
  • 此时,可以在package.json中放宽依赖项版本(希望每次主要的依赖项更新只执行一次),以便以后可以使用
    npm update
    随意更新它们:

    “开发依赖性”:{
    “someFixedVersionPackage”:“^1.0.0”,
    “另一个固定版本包”:“^2.3.2”,
    }
    
    可以使用package-lock.json文件代替包覆面提取,并且更适合于再现开发环境。它还应该提交到存储库

    那么如何更新依赖关系呢? 调用
    npm update
    将执行上面提到的操作:在遵守语义版本控制的同时更新依赖项。要在包中添加或升级依赖项,请执行以下操作:

  • 在包根目录中运行
    npm install
    ,以安装所有依赖项的当前版本
  • 添加或更新依赖项
    npm安装——分别保存每个新的或更新的包,以更新package.json以及现有的包锁(“package lock.json”和“npm shrinkwrap.json”)。请注意,它们必须显式命名才能安装:不带参数运行
    npm install
    ,只会复制锁定的依赖项
  • 验证包在新依赖项中是否按预期工作
  • 提交新的包锁
  • 此外,以下是从具有固定依赖关系的项目平稳过渡的一些技巧:

    • 如果您还没有这样做,可以通过在版本说明符之前添加一个波浪号()或插入符号()来扩展版本范围
      npm update
      随后将分别尝试安装所有修补程序修订版和次要修订版(主要版本
      0
      是一个特例,请参阅文档)。例如,“^1.0.0”现在可以更新为“^1.1.0”,而“~2.3.2”可以更新为“~2.3.4”。添加
      --save
      --save dev
      标志还将使用安装的版本更新“package.json”(同时保留以前的范围说明符)

    • 运行
      npm-outlated
      检查哪些包已过时。红色条目将通过
      npm update
      自动更新。其他条目将需要手动干预

    • 对于具有主要版本颠簸的软件包,请使用版本规范(例如
      npm安装)安装该软件包browserify@11.2.0--保存dev
      )。更新过程中可能出现的其他问题必须手动处理。阅读该软件包上的新闻提要或发布历史记录通常有助于进一步了解与以前版本相比发生了哪些变化

    这还不够简单,还有其他方法吗? 在继续之前,始终值得一提的是,软件包具有符合SemVer的版本定义是有原因的。应避免盲目安装每个软件包的最新版本。虽然这样的完整更新和工具可用于
    npm install someFixedVersionPackage@latest anotherFixedVersionPackage@latest --save-dev --save-exact