Lerna
安装
npm i lerna -D
// 初始化:
npx lerna init
创建包
npx lerna create core
添加依赖
// 给所有项目添加
npx lerna add axios
给指定安装
npx lerna add axios packages/@liusp-cli/core
// or
npx lerna add axios --scope=@liusp-cli/core
给所有的包 都执行一个命令
npx lerna exec -- //要执行的命令
// 实例:
npx lerna exec -- rm -rf node_modules/
// 所有包下 执行了
rm -rf node_modules/
给指定包 执行命令
npx lerna exec --scope=@liusp-cli/core rm -rf node_modules/
给所有包 装依赖 并 链接 lerna link
npx lerna bootstrap
手动创建本地包的关联
lerna add @liusp-cli/core --scope @liusp-cli/utils
lerna link
执行所有包下的命令
// 执行的是 package.json 里 scripts 下的
npx lerna run dev
// 指定包下的命令
npx lerna run --scope=@liusp-cli/core dev
清空依赖 删除所有项目的 node_modules(除去 根目录)
npx lerna clean
自动更新版本
npx lerna version
发布
lerna publish
列出所有的 package 下的 包
lerna list
检查上次发布到现在更改的包
lerna changed
查看 lerna 的运行环境信息
lerna info
配置信息
// lerna.json
{
// 指定包所在的目录,可以支持多个目录
packages:[
"packages/*"
],
// 允许指定命令使用的client, 默认是 npm
npmClient:'yarn',
// 使用 yarn workspaces 管理 Monorepo
useWorkspaces:true,
"command": {
"bootstrap": {
// 指定默认传给 lerna bootstrap 命令的参数
"npmClientArgs": [
"--no-package-lock"
]
},
"publish": {
"npmClient": "npm",
// 指定那些目录或者文件的变更不用触发 package 版本的变更
"ignoreChanges": [
"**/*.md",
"**/test/**"
],
"message": "chore(release): publish",
"registry": "https://registry.npmjs.org",
"conventionalCommits": true,
// 把包设置成公开的,不开 npm 不让发布
"access": "public",
}
}
}
错误记录
lerna ERR! E402 You must sign up for private packages
// 给子包下的 package.json 添加,代表所有包都是公有
{
"publishConfig": {
"access": "public"
},
}
使用 yarn 运行项目
yarn workspace @lerna-publish/core run dev
// @lerna-publish/core 不是包的路径名, 要执行包下package.json里面的name