Lerna 演练

安装

全局安装 lerna: npm install -g lerna

指令备查

指令描述
lerna bootstrap --hoist安装依赖
lerna clean删除各个包下的node_modules
lerna init创建新的lerna库
lerna list显示package列表
lerna changed显示自上次relase tag以来有修改的包, 选项通 list
lerna dif显示自上次relase tag以来有修改的包的差异, 执行 git diff
lerna exec在每个包目录下执行任意命令
lerna run执行每个包package.json中的脚本命令
lerna add dt-ui --scope=brandownerbrandowner添加dt-ui作为依赖库使用
lerna add axios --exact --scope=dt-ui增加第三方包依赖
lerna add axios --dev --exact --scope=dt-ui增加第三方打包依赖
lerna import引入package
lerna link链接互相引用的库
lerna create loc新建项目 loc是创建位置,默认是packages
lerna publish发布
lerna version --amend --no-private --yes更改自上次发布以来的包版本号

实战演练

  1. 初始化项目
    创建 lerna-ui 空文件夹,初始化 lerna init:mkdir lerne-ui && cd lerne-ui && lerna init
    修改 lerna.json 中的 version 配置为 independent

  2. 创建子项目
    进入 packages 目录,执行
    npx create-react-app ui-web --typescript
    npx vue create ui-example

    项目创建完毕后, ui-webexample-web 中同时出现 node_modules,二者会有很多重复部分,并且会占用大量的硬盘空间。

  3. 提取共同依赖
    执行 lerna clean 删除子项目的 node_modules,然后执行命令 lerna bootstrap --hoist

    lerna bootstrop --hoist 会将 packages 目录下的公共模块包抽离到最顶层 ,此时项目就公用相同的依赖了。

    但这里会有个问题, 不同版本号只会保留使用最多的版本,这种配置不太好,当项目中有些功能需要依赖老版本时,就会出现问题。

  4. yarn workspaces 解决不同项目依赖不同版本号的问题**(验证未通过)**
    lerna.json 中增加以下配置

    "npmClient": "yarn",  // 指定 npmClent 为 yarn
    "useWorkspaces": true // 将 useWorkspaces 设置为 true
    

    在顶层 package.json 中增加配置

    {
        "workspaces":[
            "packages/*"
        ]
    }
    

    增加了这个配置后 不再需要 lerna bootstrap 来安装依赖了,可以直接使用 yarn install 进行依赖的安装。注意:yarn install 无论在顶层运行还是在任意一个子项目运行效果都可以

    yarn workspaces会检查每个子项目里面依赖及其版本,如果版本不一致都会保留到自己的 node_modules 中,只有依赖版本号一致的时候才会提升到顶层。

  5. 启动子项目
    笨方法:进入 packages/子项目目录,执行 yarn start
    lerna 的方法:
    在顶层 package.json 中进行配置 script

    "scripts": {
        "web": "lerna exec --scope example-web -- yarn start",
    }
    

    在顶层 lerna.json 中增加配置

    {
    	"npmClient": "true"
    }
    
  6. 模块引用
    在项目 example-web 中增加 ui-common 模块依赖:
    lerna add ui-common --scope=example-web

  7. 发布
    lerna publish
    注意版本号维护问题

参考链接:
Lerna 文档
Lerna 指令
现代前端工程化-彻底搞懂基于 Monorepo 的 lerna 模块(从原理到实战)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值