你能撤消 lerna bootstrap 吗?

Can you undo a lerna bootstrap?

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

Lerna link(或 bootstrap)将直接在 node_modules 目录下创建 symlinks,或者对于带有 @-scoped name 的包,在具有该名称的子目录中。假设您的包都在 ./packages/* 中,任何 symlink 直接在 ./node_modules 下或 ./packages/*/node_modules 中。例如,在 bootstrap 之后,lerna 为我创造性地命名的 @myscope/foo 包创建了一对 symlinks:

.
├── 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 创建的符号 link。

我可以使用 ls -l 转储源和 symlink 目标(相对于 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 {} \;删除它们。它不如内置的撤消功能好,但至少它可以帮助您了解 lerna 做了什么。

是的,运行

lerna clean

参考:https://github.com/lerna/lerna/tree/main/commands/clean#readme