gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 09:30:40 25 4
gpt4 key购买 nike

我有一个带有更新的固定版本的 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 update在这里工作?

根据 npm update 上的文档:

This command will update all the packages listed to the latest version (specified by the tag config), respecting semver.

It will also install missing packages. As with all commands that install packages, the --dev flag will cause devDependencies to be processed as well.



由于您的软件包是使用固定版本定义的,因此 update 子命令不会更新这些以遵守 semantic versioning .因此,如果您为每个包指定更大的版本范围,它只会自动更新您的包。请注意,在 npm 项目中实际上通常指定一个宽松的版本;一种旨在避免破坏性更改但仍留有改进和修复空间的方法。

尽管如此,为什么我不应该在我的 package.json 中修复依赖版本?

But they are fixed because I wanted them so. After testing newer versions, I want to update them via command line as were created.



具有固定版本的依赖项列表并不意味着安装的依赖项将始终相同,因为您的依赖项的依赖项很可能也定义了版本范围。为了跟踪经过测试的版本标记依赖项列表,npm 提供了另一种机制: package locks .

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

npm shrinkwrap

This command locks down the versions of a package's dependencies so that you can control exactly which versions of each dependency will be used when your package is installed.



从 npm 5 开始,当 npm 操作修改“node_modules”树或“package.json”时,会自动生成“package-lock.json”。

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

Shrinkwraps 用于发布包。要收缩包装包裹:
  • 运行 npm install在包根目录中安装所有依赖项的当前版本。
  • 验证包在这些版本中是否按预期工作。
  • 运行 npm shrinkwrap ,将 npm-shrinkwrap.json 添加到 git,并发布您的包。

  • 在这一点上,依赖版本可以在你的 package.json 中放宽(这有望在每次主要依赖更新时只完成一次),以便以后可以使用 npm update 随意更新它们。 :

    "devDependencies": {
    "someFixedVersionPackage": "^1.0.0",
    "anotherFixedVersionPackage": "^2.3.2",
    }

    package-lock.json 文件可以代替shrinkwrap,更适合复现开发环境。它也应该提交到存储库。

    那么如何更新我的依赖项呢?

    调用 npm update将执行上面提到的操作:在尊重语义版本控制的同时更新依赖项。要在包中添加或升级依赖项:
  • 运行 npm install在包根目录中安装所有依赖项的当前版本。
  • 添加或更新依赖项。 npm install --save每个新的或更新的包单独更新 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 flags 还将使用已安装的版本更新“package.json”(同时保留以前的范围说明符)。
  • 运行 npm outdated检查哪些软件包已过时。红色条目将自动更新为 npm update .其他条目将需要手动干预。
  • 对于具有主要版本颠簸的软件包,请使用版本规范(例如 npm install browserify@11.2.0 --save-dev )安装该软件包。更新可能出现的其他问题必须手动处理。阅读该软件包上的新闻提要或发布历史通常有助于进一步了解与以前版本相比发生了什么变化。

  • 这还不够简单,有没有其他方法可以做到这一点?

    在继续之前,始终值得一提的是,出于某种原因,包具有符合 SemVer 的版本定义。应该避免盲目安装每个软件包的最新版本。虽然如此全面更新 can be done并且有可用的工具,建议谨慎行事。例如,如果剩余的 React 组件和库与 react@15.x.x 不兼容,您将不想安装 React 15 .另见 npm 的博文: Why use SemVer?

    我会把握机会。还有哪些工具?

    仅举几例:
  • npm-check-updates 将执行问题中最初提出的问题:安装和更新所有依赖项的版本,无论给定的范围约束如何。然而,这将是这项工作最不推荐的工具。
  • updtr 如果项目的测试失败,将一一更新依赖项并回滚到以前的版本,这可以节省测试覆盖率良好的项目的时间。
  • npm-check 提供交互式命令行界面,让您可以轻松选择要更新的软件包。

  • 这与 npm 5 有什么不同吗?

    从主要版本 5 开始,npm 将自动创建一个 "package-lock.json" ,当一个shrinkwrap不存在时,它将填补指定依赖树的作用。更详细的描述可以在 package-locks documentation 中找到。 .一般来说,npm-shrinkwrap.json 是用来发布的,而 package-lock.json 是用来开发的。这就是为什么您还应该将“package-lock.json”提交到存储库的原因。

    yarn 呢?

    Yarn ,一个与 npm 兼容的依赖管理器,在使用时自动创建一个锁定文件,其行为类似于 npm shrinkwrap。调用 yarn upgrade «package» 将更新一个依赖项到 latest 中的版本标记,无论 package.json 或锁定文件中记录的版本范围如何。使用 yarn upgrade-interactive还允许您有选择地将软件包升级到最新版本,这与 npm-check 不同.

    $ yarn outdated
    yarn outdated v0.16.1
    Package Current Wanted Latest
    babel-eslint 7.0.0 7.0.0 7.1.0
    chai 3.0.0 3.0.0 3.5.0
    Done in 0.84s.
    $ yarn upgrade babel-eslint chai
    yarn upgrade v0.16.1
    [1/4] Resolving packages...
    [2/4] Fetching packages...
    [3/4] Linking dependencies...
    [4/4] Building fresh packages...
    success Saved lockfile.
    success Saved 2 new dependencies.
    ├─ babel-eslint@7.1.0
    └─ chai@3.5.0

    关于npm - 从命令行更新具有固定依赖项的 npm 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33343533/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com