lerna介绍

具体介绍和更多的命令具体请阅读官方文档:lerna
常用命令如下:

  1. ## 初始化lerna项目
  2. npx lerna init
  3. ## 创建模块
  4. lerna create plugin-one -y ## 默认会在pacakges文件夹下创建子项目
  5. ## 给所有子项目添加模块
  6. lerna add @lzy-plugin/ddd-cqrs
  7. ## 给指定项目添加模块
  8. lerna add @lzy-plugin/mongo-context --scope @lzy-component/*
  9. lerna add @lzy-plugin/mongo-context --scope @lzy-project/test
  10. ## 所有子项目执行命令
  11. lerna exec npm run test
  12. ## 指定子项目执行命令
  13. lerna exec "npm uninstall jest -D" --scope @lzy-component/*
  14. lerna exec npm install jest --scope @lzy-project/test
  15. ## 删除所有node_modules,同理,也可以通过--scope指定范围
  16. lerna clean
  17. ## 安装模块,同理,也可以通过--scope指定范围
  18. lerna bootstrap
  19. ## lerna version 指定发布版本
  20. ## 发布npm包
  21. lerna publish

项目演示

因为github因为被墙、DNS被运营商污染,导致github经常无法访问,所以推荐使用其他平台的git远程仓库:
1、gitee
2、阿里云的云效仓库
再推荐一下npm仓库,如果要发布成组织npm包,需要收费。如果你的npm包是在企业内部使用的,可以在网上搜索如何在自己本机上搭建npm仓库服务,也可以直接选择阿里云提供的npm仓库(免费的)

1、创建git仓库

代码仓库选择使用阿里云提供的packages代码仓库,该代码仓库是免费的,且面向团队内部开发的项目
image.png
1)创建代码分组
image.png
2)创建代码仓库
输入完代码库名称后直接点击确定,默认配置即可。
image.png
3)查看连接信息
image.png

2、创建npm仓库

这里选择使用阿里云提供packages制品仓库
image.png
1)创建新的企业
image.png
2)获取npm仓库的连接信息
image.pngimage.png
这里就能看到我们npm仓库的链接地址,以及阿里云帮我们随机生成的用户名和密码,接下来会用到

3、创建项目

  1. //创建项目目录
  2. mkdir lerna-yarn-demo && cd lerna-yarn-demo
  3. //初始化为lerna项目
  4. npx lerna init
  5. ## 接下来把代码上传代码仓库
  6. ## 如果是第一次使用,需要全局设置git的username和email
  7. git config --global user.name "[your username]"
  8. git config --global user.email "[your email]"
  9. git add . && git commit -m 'first commit'
  10. git remote add origin [registry url]
  11. git push origin main ## 这里将master改为main
  12. ## 如果每次操作git都要求提示输入账号密码,键入以下命令之后输入账号密码,就不会再提示了
  13. git config --global credential.helper store
  14. ## 账号密码如何获取请看下面图文

image.png
image.png
拷贝以上的账号密码后输入即可通过验证

4、修改配置

先看一下项目目录

  1. lerna.json ## lerna配置文件
  2. package.json ## npm包配置文件
  3. └─packages ## 默认的子项目存放文件夹

接下来我们修改一下lerna.json和package.json

  1. {
  2. "packages": [ //新增三个文件夹作为工作区
  3. "components/*",
  4. "plugins/*",
  5. "projects/*"
  6. ],
  7. "bootstrap": {
  8. "hoist": true,
  9. "noCi": true,
  10. "npmClientArgs": [
  11. "--no-package-lock"
  12. ]
  13. },
  14. "command": {
  15. "publish": {
  16. "ignoreChanges": [ //以下文件更新不会发布新版本的npm
  17. "ignored-file",
  18. "*.md"
  19. ],
  20. "message": "chore(release): publish",
  21. "registry": "[npm-registry]" //npm包远程仓库
  22. }
  23. },
  24. "npmClient": "yarn", //指定使用的npm包管理工具
  25. "version": "1.0.0" //当前版本号
  26. }
  1. {
  2. "name": "lerna-yarn-demo",
  3. "devDependencies": {
  4. "lerna": "^4.0.0"
  5. },
  6. "private": true,//设置为私有.不会被发布到npm仓库
  7. }

5、添加npm包项目

  1. ## 通过lerna创建一个空的npm包项目
  2. lerna create module-one -y ## 默认会在第一个工作区内创建npm包 -y:默认设置
  3. lerna create project-test examples -y ## project-test后面添加的examples为指定工作区文件夹
  4. ## 通过npm init创建一个空的npm包项目
  5. cd packages && mkdir module-two && cd module-two && npm init -y
  6. ## 下载模板
  7. git clone 模板链接 ## 记得把模板项目中.git删掉,免得跟根目录的.git发生冲突

6、添加模块依赖

  1. ## 添加依赖包
  2. lerna add module-two //除了module-two子项目以外的所有项目都会安装这个包
  3. lerna exec "npm install -D jest" //所有子项目添加jest模块

7、调试npm包

根据上面命令,我们已经在所有工作区中添加了jest模块,并且module-one依赖了module-two模块,现在我们来模拟一下如何对某个模块进行测试

  1. // packages/module-two/lib/module-two.js
  2. 'use strict';
  3. module.exports = {
  4. getMsg: () => {
  5. return 'hello two'
  6. }
  7. };
  8. // packages/module-one/lib/module-one.js
  9. 'use strict';
  10. const { getMsg } = require('module-two')
  11. module.exports = moduleOne;
  12. function moduleOne () {
  13. // TODO
  14. console.log(getMsg())
  15. }

修改module-one的package.json

  1. "scripts": {
  2. "test": "jest"
  3. },

运行以下命令

  1. lerna exec npm run test

运行结果如下
image.png

7、发布npm包

  1. ## 如果npm包项目需要构建的话,记得在发布版本之前,先构建一下
  2. ## lerna exec npm run build
  3. lerna version ##选择版本号
  4. lerna publish ##发布npm包