【问题标题】:npm workspaces: update workspace package.json's embedded in package-lock.jsonnpm 工作空间:更新嵌入在 package-lock.json 中的工作空间 package.json
【发布时间】:2022-08-08 18:56:46
【问题描述】:

我正在使用 npm 工作区来管理 monorepo。我注意到顶级package-lock.json 在其\"package\" 字段中包含每个工作区package.json 的缓存副本。如何在不更新package-lock.json 中的所有依赖版本的情况下刷新这些缓存副本?

到目前为止,我发现的最佳方法是:

  • 删除顶级package-lock.json
  • 运行npm i

这可行,但也会更新package-lock.json 中的所有依赖项版本。我宁愿避免这种情况,以防更新依赖项破坏某些东西,因为这会为package-lock.json 创建巨大的 git 差异。

非解决方案

运行 npm update <workspace package name> 不起作用,至少如果我更改了工作区的包版本号 (No matching version found for <package name>@<new version>)。

如果我按照建议的here 尝试npm i --package-lock-only,同样的问题。

动机

package-lock.json 已检查到我的 git monorepo 中,所以我认为每次碰撞工作区包的版本时都需要像这样更新它。

我过去也遇到过一个问题,我更新了工作区的package.json 中的bin 字段,但npm ci 继续使用旧版本。这已通过刷新 package-lock.json 修复,但再次以更新所有依赖版本为代价。

    标签: npm monorepo package-lock.json


    【解决方案1】:

    您可以编写自己的脚本,例如:

    获取工作区:

    WORKSPACES=`jq  -r '.workspaces | @sh' package.json | tr -d \\'`
    

    然后运行 ​​bash for 循环:

    for w in ${WORKSPACES[@]};  do echo \"$w\" && pushd . && cd $w && npm i && rm -rf node_modules; popd; done;"
    

    所以在 package.json 你可以在一个脚本中组合:

    "update": "WORKSPACES=`jq  -r '.workspaces | @sh' package.json | tr -d \\'` && for w in ${WORKSPACES[@]};  do echo \"$w\" && pushd . && cd $w && npm i && rm -rf node_modules; popd; done;"
    

    或类似的东西。 希望能帮助到你。

    【讨论】:

      【解决方案2】:

      使用npm version 命令更新package.jsonpackage-lock.json 中的版本

      npm version <version> --workspace=<package-name>
      

      【讨论】:

        猜你喜欢
        • 2018-04-19
        • 1970-01-01
        • 1970-01-01
        • 2018-03-24
        • 1970-01-01
        • 2021-03-02
        • 2020-09-24
        • 2011-10-29
        • 2016-10-02
        相关资源
        最近更新 更多