【问题标题】:Can you undo a lerna bootstrap?你能撤消 lerna 引导程序吗?
【发布时间】:2020-07-28 10:12:12
【问题描述】:

我已经运行了一个 lerna bootstrap --hoist。我现在想撤消此操作并取消链接所有创建的符号链接。有命令吗?

【问题讨论】:

  • 你的意思是从所有创建的包中清理 node_modules 吗?
  • 我的理解是 lerna bootstrap 会为节点模块中的依赖包创建符号链接,因此不必从外部拉取依赖项。我会清理节点模块并执行 npm 我摆脱这些符号链接吗?
  • 是的,我想是的

标签: javascript node.js lerna monorepo


【解决方案1】:

Lerna 链接(或引导程序)将直接在 node_modules 目录下创建符号链接,或者对于具有 @-scoped name 的软件包,在具有该名称的子目录中创建符号链接。假设你的包都在./packages/* 中,任何直接位于./node_modules./packages/*/node_modules 下的符号链接。例如,在引导之后,lerna 创建了几个符号链接到我创造性地命名的@myscope/foo 包:

.
├── lerna.json
├── node_modules
│   └── @myscope
│       └── foo -> ../../packages/foo
├── package.json
├── package-lock.json
└── packages
    ├── bar
    │   ├── node_modules
    │   │   └── @myscope
    │   │       └── foo -> ../../../foo
    │   └── package.json
    └── foo
        └── package.json

我可以用 find 把它们挖出来:

$ find . -type l -and \( -path './node_modules/*' -or -path './packages/*/node_modules/*' \)
./packages/bar/node_modules/@myscope/foo
./node_modules/@myscope/foo

这不是完全有选择性的,因为它可以找到您使用 npm link 创建的符号链接。

我可以使用ls -l 转储源代码和符号链接目标(而readlink 只会打印目标):

$ find . -type l -and \( -path './node_modules/*' -or -path './packages/*/node_modules/*' \) -exec ls -l {} \;
lrwxrwxrwx 1 eric eric 12 janv.  4 09:46 ./packages/bar/node_modules/@myscope/foo -> ../../../foo
lrwxrwxrwx 1 eric eric 18 janv.  4 09:45 ./node_modules/@myscope/foo -> ../../packages/foo

如果您对选择性有信心,可以 -exec rm {} \; 将其删除。它不如内置的 undo 好,但至少它可以帮助您了解 lerna 做了什么。

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 2019-04-21
      • 2015-04-14
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 2017-07-19
      • 2011-03-13
      • 1970-01-01
      • 2011-04-26
      相关资源
      最近更新 更多