Lerna 脚手架搭建:从开发到发布
官网文档: https://lerna.js.org/
创建packages
- 初始化npm
npm init npm init -y
- 安装lerna
npm i lerna@6.6.2 -D 不安装最新的v7,是v7删掉了lerna bootstrap 和 lerna add命令
npm i lerna@6.6.2 -g - 初始化lerna
lerna init lerna init --independent 独立模式,每个包的版本号都是独立的,不会统一管理
报错: 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 Cannot initialize lerna because your package manager has not been configured to use `workspaces`, and you have not explicitly specified any packages to operate on 中文: 无法初始化lerna,因为尚未配置包管理器
解决: 可能是网络不行, 多试试。
- 创建package
lerna create <package-name> [loc] 会自动创建packages文件夹。本地路径,如果不填写,默认安装到所有的包 <package-name> @rapid-vue-cli/core @rapid-vue-cli 组织名 core 包名
lerna create @rapid-vue-cli/core
lerna create @rapid-vue-cli/core packages --yes 不会询问是否创建报错: Command failed with exit code 1: git config --get user.name。
解决: 配置 Git 用户名和邮箱。
git config --global user.name "" git config --global user.email "" 然后查看是否设置成功 git config --global --get user.name git config --global --get user.email
- 安装依赖
lerna add local(本地路径,如果不填写,默认安装到所有的包) lerna add --scope 安装指定包的依赖 lerna add --scope --dev 安装指定包的开发依赖 lerna add --scope --peer 安装指定包的同级依赖 lerna add --scope --exact 安装指定包的精确版本依赖 lerna add --scope --exact --dev 安装指定包的精确版本开发依赖 lerna add --scope --exact --peer 安装指定包的精确版本同级依赖 lerna add --scope --exact --peer --dev 安装指定包的精确版本同级依赖和开发依赖 lerna add --scope --exact --peer --dev --registry=https://registry.npm.taobao.org 安装指定包的精确版本同级依赖和开发依赖,并且指定淘宝镜像 lerna add --scope --exact --peer --dev --registry=https://registry.npm.taobao.org --loglevel=verbose 安装指定包的精确版本同级依赖和开发依赖,并且指定淘宝镜像,并且打印安装日志 lerna add --scope --exact --peer --dev --registry=https://registry.npm.taobao.org --loglevel=verbose --no-bootstrap 安装指定包的精确版本同级依赖和开发依赖,并且指定淘宝镜像,并且打印安装日志,并且不执行lerna bootstrap lerna add --scope --exact --peer --dev --registry=https://registry.npm.taobao.org --loglevel=verbose --no-bootstrap --nohoist 安装指定包的精确版本同级依赖和开发依赖,并且指定淘宝镜像,并且打印安装日志,并且不执行lerna bootstrap,并且不执行lerna hoist
提示: No packages found where npmlog can be added. (目录下的package.json 或 packages目录下的package.json存在包名, 删除重新执行lerna add)
- 软链接依赖
lerna link 创建项目内部包之间的软链接。需先在目标包的package.json 里的 dependencies添加配置,再执行。
脚手架开发和测试
- 清空所有包已安装的依赖
lerna clean
- 卸载依赖 执行目录在 packages 文件夹范围内包里的文件,不能删除包。删除packages下所有的node_modules。
lerna exec -- rm -rf node_modules/ 删除packages下所有的node_modules
- 卸载指定包的依赖
lerna exec --scope @rapid-vue-cli/core -- rm -rf node_modules/ 删除@rapid-vue-cli/core(文件的包名, 项目里package.json里的name) 下的node_modules
- 重新安装删除的依赖 会根据各包中的package.json 里的 dependencies配置 安装对应的依赖
lerna bootstrap
- 执行npm脚本
lerna run test 每一个包都会执行test脚本
lerna run test --scope @rapid-vue-cli/core 执行指定包的test脚本
脚手架发布和上线
- 查看版本
lerna version
lerna version --conventional-commits 会根据git commit的规范自动更新版本号
lerna version --conventional-commits --amend 会根据git commit的规范自动更新版本号,并且会把更新的版本号添加到上一次的commit中 - 查看改动 距上次发布的改动
lerna changed
- 查看commit之间的差异不同
lerna diff
- 发布
lerna publish 会发布所有的包
lerna publish --conventional-commits 会根据git commit的规范自动更新版本号,并且会发布所有的包
lerna publish --conventional-commits --amend 会根据git commit的规范自动更新版本号,并且会把更新的版本号添加到上一次的commit中,并且会发布所有的包 -
如报错: err E401 [UNAUTHORIZED] Login first. ERR! E402 You must sign up for private packages
解决方案: npm login 登录npm账号后 再次发布
如 npm login报错: ! code E403 npm ERR! 403 403 Forbidden - PUT https://registry.npmmirror.com/-/user/org.couchdb.user:rapid-ff - [FORBIDDEN] Public registration is not allowed npm ERR! 403 In most cases, you or one of your dependencies are requesting npm ERR! 403 a package version that is forbidden by your security policy, or npm ERR! 403 on a server you do not have access to.
解决方案: 这是因为更换了淘宝的cnpm --registry=https://registry.npm.taobao.org 登录淘宝镜像npm账号后 再次发布 或者 切换源 npm config set registry https://registry.npmjs.org/ 登录npm账号后 再次发布