node.js - 如何在工作区中使用 npm-shrinkwrap?

我有一个 monorepo 项目,其中一个包是一个 cli。为了防止 npm 供应链攻击,我正在考虑使用 npm-shrinkwrap

文档 here说:

The recommended use-case for npm-shrinkwrap.json is applications deployed through the publishing process on the registry: for example, daemons and command-line tools intended as global installs or devDependencies

这正是我在部署命令行工具时想要的。唯一的问题是,npm-shrinkwrap 似乎不支持工作区。

假设我的 monorepo 的 cli 部分可以在路径中找到:/code/packages/cli,当我切换到它并运行 npm shrinkwrap 我得到错误:

npm ERR! code ENOWORKSPACES
npm ERR! This command does not support workspaces.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/me/.npm/_logs/2022-05-16T20_53_41_147Z-debug-0.log

如果我切换到项目的根目录,即 /code/ 并运行 npm shrinkwrap,它会生成一个 npm-shrinkwrap.json 具有以下结构:

{
  "name": "root",
  "version": "1.0.0",
  "lockfileVersion": 2,
  "requires": true,
  "packages": {
    "": {
      "name": "root",
      "version": "1.0.0",
      "license": "ISC",
      "workspaces": [
        "packages/*"
      ],
      "devDependencies": {
        "lerna": "^4.0.0"
      }
    },
    "packages/cli": {
      "name": "@proj/cli",
      "version": "1.0.0",
      "extraneous": true,
      "license": "ISC"
    }
  }
}

但唯一的问题是,这不是应该为 cli 创建的确切结构。此外,当我发布包(使用 lerna)时,npm-shrinkwrap.json 从未包含在 cli 包中。

关于如何使 npm-shrinkwrap 与工作区一起工作的任何提示?

基本上如何为 monorepo 中的包生成 npm-shrinkwrap.json 并在该包发布时包含它?

最佳答案

工具npm-lockfile使用 npm 的内部结构并在 monorepos 内部工作。

不幸的是,他们使用的是旧版本的 @npm/arborist,所以它不能正常工作,你可以使用 my patch现在

https://stackoverflow.com/questions/72265540/

相关文章:

mysql - 运行 mysql_secure_installation 时出现错误

javascript - React.useEffect 在依赖项发生变化时不会触发

angular - 如何重置表单中的特定字段?

visual-studio - 如何一次查找和替换多个不同的键值对?

amazon-web-services - 如何找出弹性 beantalk 部署失败的原因?

google-cloud-platform - 为什么 Airflow PubSubPullOper

python - 最大方程长度

rust - 为什么 cargo build 在 git 更改锁时忽略锁文件?

laravel - 对 Laravel Controller 策略中的 $this->authori

azure - 我正在将 AddMicrosoftIdentityWebApi .net core