問題描述
你能撤消 lerna 引導程序嗎? (Can you undo a lerna bootstrap?)
我已經運行了一個 lerna bootstrap ‑‑hoist。我現在想撤消此操作並取消鏈接所有創建的符號鏈接。有命令嗎?
參考解法
方法 1:
yes, run
lerna clean
Reference: https://github.com/lerna/lerna/tree/main/commands/clean#readme
方法 2:
Lerna link (or bootstrap) will create symlinks either directly underneath a node_modules directory or, for packages with an @‑scoped name, in a subdirectory with that name. Assuming your packages are all in ./packages/*
, Any symlinks directly underneath ./node_modules
or in ./packages/*/node_modules
. For instance, after bootstrap, lerna has created a couple symlinks to my creatively‑named @myscope/foo
package:
.
├── 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
I can dig those out with find:
$ find . ‑type l ‑and \( ‑path './node_modules/*' ‑or ‑path './packages/*/node_modules/*' \)
./packages/bar/node_modules/@myscope/foo
./node_modules/@myscope/foo
This isn't perfectly selective because it could find symlinks that you created with npm link
.
I can use ls ‑l
to dump the source and the symlink target (vs. readlink
which would just print the target):
$ 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
If you're feeling confident about selectivity, you can ‑exec rm {} \;
to remove them. It's not as good as a built‑in undo, but at least it helps you see what lerna did.
(by Sheen、Sebastián Iturra、ericP)