飞跃高山与大洋的鱼飞跃高山与大洋的鱼
首页
先看
计算机
  • 数学
  • Linux
  • Arch
  • Manjaro
  • Ubuntu
  • CentOS
  • Kubernetes
  • Web
  • JavaScript
  • TypeScript
  • CSS
  • Canvas
  • Vue
  • Vite
  • NuxtJS
  • Webpack
  • Flutter
  • D3
  • Jest
  • WeApp
  • Utils
  • Nodejs
  • Nestjs
  • Golang
  • Nginx
  • Traefik
  • MySQL
  • MongoDB
  • Redis
  • Docker
算法
  • 像素风
  • Git
  • Github
  • VSCode
  • Chrome
  • Google
  • Bookmark scripts
  • 导航 🎉
  • VuePress 侧边栏插件
  • VuePress 官网
🚇 开往
首页
先看
计算机
  • 数学
  • Linux
  • Arch
  • Manjaro
  • Ubuntu
  • CentOS
  • Kubernetes
  • Web
  • JavaScript
  • TypeScript
  • CSS
  • Canvas
  • Vue
  • Vite
  • NuxtJS
  • Webpack
  • Flutter
  • D3
  • Jest
  • WeApp
  • Utils
  • Nodejs
  • Nestjs
  • Golang
  • Nginx
  • Traefik
  • MySQL
  • MongoDB
  • Redis
  • Docker
算法
  • 像素风
  • Git
  • Github
  • VSCode
  • Chrome
  • Google
  • Bookmark scripts
  • 导航 🎉
  • VuePress 侧边栏插件
  • VuePress 官网
🚇 开往
  • NODEJS

    • 快速尝鲜 NodeJS
    • 使用 Lerna 维护关联的模块
      • 使用
      • 依赖
        • 1. 工具依赖
        • 2. package 依赖
        • 3. workspaces
      • 更多命令
    • 简单聊聊 NPM 和 YARN 的命令
    • 使用 verdaccio 搭建私有 npm

使用 Lerna 维护关联的模块

Lerna is a tool that optimizes the workflow around managing multi-package repositories with git and npm.

-- lerna

对于维护多个 package 来说,都会遇到一个选择,是选择 mono-repo 还是 multi-repo。multi-repo 一个模块(module)一个仓库(repository),而 mono-repo 是所有模块整合在一个仓库,语义来源。

使用

lerna 初始化分为两种模式:fix(默认,锁定模式,项目内的所有 package 共用版本号)、independent(独立模式,每个 package 拥有独立版本号)。个人认为大部分情况下都应该使用独立模式,即每个 package 都有自己的版本号。

# 安装
npm i lerna -g

# git
git init lerna-repo && cd lerna-repo

# lerna
lerna init [--independent] # 生成下方文件夹
#lerna-repo
#├── lerna.json
#├── package.json
#└── packages

# 创建 packages
lerna create pkg-1 -y
lerna create pkg-2 -y

依赖

1. 工具依赖

对于 eslint、commit-lint 等工具依赖,可以直接使用 yarn 或 npm 安装到顶层。

2. package 依赖

针对 package 的依赖可以交由 lerna 安装。

  1. 所有 packages

    lerna add module1
    
  2. 单独 package

    lerna add module1 packages/pkg-1
    
  3. 卸载

    # 所有
    lerna exec -- "yarn remove pkg-2"
    # 指定
    lerna exec --scope=pkg-1 "yarn remove pkg-2"
    # 或使用空格替代 `=`
    lerna exec --scope pkg-1 "yarn remove pkg-2"
    

3. workspaces

为了减少子模块的重复依赖可以使用 workspaces 将依赖提取到上级目录。

启用该模式非常简单:

  1. 在 lerna.json 中添加 "useWorkspaces": true

  2. 在 package.json 中添加 "workspaces": ["packages/*"]

    按照约定俗成将模块放置于 packages 目录下

有时候也会希望不同的模块走不同的依赖版本,这需要使用 nohoist:

注意,需要模块为 private

"workspaces": {
  "packages": ["packages/*"],
  "nohoist": ["**/vue", "**/vue/**"]
}

也可以在模块中进行设置:

"workspaces": {
  "nohoist": ["vue", "vue/**"]
}

lerna bootstrap 也提供了参数 --nohoist。

更多命令

  • lerna publish
  • lerna version
  • lerna bootstrap
  • lerna list
  • lerna changed
  • lerna diff
  • lerna exec
  • lerna run
  • lerna init
  • lerna add
  • lerna clean
  • lerna import
  • lerna link
  • lerna create
  • lerna info
编辑文档!
上次更新:
贡献者: shanyuhai123
Prev
快速尝鲜 NodeJS
Next
简单聊聊 NPM 和 YARN 的命令