lerna

2022-05-18  本文已影响0人  白白白大爷_SimonLau

关键字:lerna yarn workspace

lerna

lerna init

将一个仓库初始化为 lerna 仓库(默认固定模式)

lerna create 「package」

创建一个 package 到项目工程的 packages 下。

lerna add 「module」

  lerna add react
lerna add react-dom packages/package1 
// or 
lerna add react-dom --scope=package1
npm install typescript -D
lerna add package2 --scope package1 
// or 
lerna add package2 packages/package1

lerna publish

用于 npm 包版本发布

lerna bootstrap

用于将 packages 链接在一起(前提是相互依赖的库),并安装 package 下的依赖到 package/node_modules。

lerna clean

删除各个包下的 node_modules(不会删除根目录 node_modules)。

lerna run 「script」

lerna run test
lerna run test --scope package1

lerna link

链接互相引用的库,当 pakcage/package.json 内明确了 packages 下的包时,才会将相关包链接到 package/node_modules 中。

lerna info

查看 lerna 及运行环境的信息。

Lerna 最佳实践

lerna + yarm workspace 结合的 Monorepo 方案

yarn workspace 管理工程

初始化工程时,需另做配置如下:

{
  ...
  "npmClient": "yarn",
  "useWorkspaces": true
}
{
  "private": true, // 工作空间不需要发布
  ...
  "workspaces": ["packages/*"]
}

yarn workspace 管理命令

yarn install

代替 npm install + lerna bootstrap 安装工程依赖。
它与 lerna bootstarp 不同的是:

yarn add 「module」

yarn workspaces add react
yarn workspace package1 add react react-dom --save

package1 一定是 packages/package1/package.json name 字段,有时候 package 的目录名和 name 字段不一致,要以 name 为准。

cd 根目录 
yarn add @babel/core -D -W (-W 表示将依赖添加到 workspaces 根目录)
yarn workspace package1 add package2

当 package2 没有发布在 npmjs 上时,此时会报错:package2 not found;解决办法:显示指定 package2 的版本: yarn workspace package1 add package2@^1.0.0

yarn add package@^1.0.0 -W

yarn remove「module」

和上面 yarn add 命令格式相同,只需将 add 替换为 remove 即可。

yarn run 「script」

yarn test
yarn workspace package1 run test

命令虽然是在根目录下执行,但在执行文件中拿到的 process.cwd() 是 package 下的执行文件所在路径

yarn workspaces run test

如果某个 package 下没有对应 script,将会终止命令,并报错。

yarn workspaces info

查看 workspace 依赖树信息。

参考: [https://juejin.cn/post/7097820725301477406#heading-12]

上一篇下一篇

猜你喜欢

热点阅读