About
Lerna— это инструмент, который оптимизирует рабочий процесс для управления репозиториями с несколькими пакетами с помощью git и npm.
Vue, babel, react и т. д. — все это используется. Наша компания также использует его. Документация на английском языке, поэтому я кратко опишу ее, надеюсь, она будет полезна всем.
Два режима работы
Fixed/Locked mode (default)
vue, babel все это, вpublish
, будет вlerna.json
внутри файла"version": "0.1.5",
,В соответствии с этим номером добавьте его, только выберите его один раз, и другие пакеты с изменениями автоматически обновят номер версии.
Independent mode
lerna init --independent
Инициализировать проект.lerna.json
внутри файла"version": "independent",
каждый разpublish
, вы получите приглашение для каждого измененного пакета указать, является ли это исправлением, незначительным изменением, основным изменением или пользовательским изменением.
Start init
$ npm install lerna -g
$ mkdir lerna-gp && cd $_
$ lerna init # 用的默认的固定模式,vue babel等都是这个
# Add packages
$ cd packages
$ mkdir daybyday gpnode gpwebpack
...
#分别进入三个目录初始化成包
$ cd daybyday
$ npm init -y
$ cd ../gpnode
$ npm init -y
$ cd ../gpwebpack
$ npm init -y
Структура проекта
➜ lerna-gp git:(master) ✗ tree
.
├── lerna.json
├── package.json
└── packages
├── daybyday
│ └── package.json
├── gpnode
│ └── package.json
└── gpwebpack
└── package.json
4 directories, 5 files
Set up
Set up git + npm
✗ git remote add origin git@gitlab.yourSite.com:gaopo/lerna-gp.git
#查看是否登录
✗ npm whoami
gp0320
#没有则登录
npm login
# 输入username password
Logged in as gp0320 on https://registry.npmjs.org/. # succeed
Настройте режим рабочих пространств пряжи
По умолчанию используется npm, и каждый подпакет имеет свой собственный
node_modules
, после этой настройки только верхний слой имеетnode_modules
- Изменить верхний уровень
package.json and lerna.json
# package.json 文件加入
"private": true,
"workspaces": [
"packages/*"
],
# lerna.json 文件加入
"useWorkspaces": true,
"npmClient": "yarn",
Lerna Script
lerna create < name > [loc]
Создайте пакет, назовите имя пакета, местоположение необязательно
Examples
# 根目录的package.json
"workspaces": [
"packages/*",
"packages/@gp0320/*"
],
# 创建一个包gpnote默认放在 workspaces[0]所指位置
lerna create gpnote
# 创建一个包gpnote指定放在 packages/@gp0320文件夹下,注意必须在workspaces先写入packages/@gp0320,看上面
lerna create gpnote packages/@gp0320
lerna add [@version] [--dev] [--exact]
Добавить локальный или удаленный
package
как текущий проектpackages
зависимости внутри
-
--dev
devDependencies переопределитьdependencies
-
--exact
Установите точную версию, то есть установленную версию пакета без переднего^
, Eg:"^2.20.0" ➜ "2.20.0"
Examples
# Adds the module-1 package to the packages in the 'prefix-' prefixed folders
lerna add module-1 packages/prefix-*
# Install module-1 to module-2
lerna add module-1 --scope=module-2
# Install module-1 to module-2 in devDependencies
lerna add module-1 --scope=module-2 --dev
# Install module-1 in all modules except module-1
lerna add module-1
# Install babel-core in all modules
lerna add babel-core
lerna bootstrap
По умолчанию используется npm i, потому что мы указали yarn, поэтому запустите yarn install, которая установит все зависимости пакета в корень.node_modules
.
lerna list
Перечислите все пакеты, если он не соответствует тому, что в вашей папке, введите этот пакет и запуститеyarn init -y
решить
➜ lerna-gp git:(master) ✗ lerna list
lerna notice cli v3.14.1
daybyday
gpnode
gpnote
gpwebpack
lerna success found 4 packages
lerna import
Импорт пакета, который уже существует локально
lerna run
lerna run < script > -- [..args] # 运行所有包里面的有这个script的命令
$ lerna run --scope my-component test
lerna exec
запускать произвольные команды для каждого пакета
$ lerna exec -- < command > [..args] # runs the command in all packages
$ lerna exec -- rm -rf ./node_modules
$ lerna exec -- protractor conf.js
lerna exec --scope my-component -- ls -la
lerna link
Пакет проекта устанавливает мягкую цепочку, аналогичную ссылке npm.
lerna clean
Удалите каталог node_modules для всех пакетов.
lerna changed
Список следующего выпускаlerna publish
Пакет для обновления.
принцип:
Нужно получить Git Add, Git Commit.
Тогда он будет запускать внутреннееgit diff --name-only v版本号
, чтобы собрать измененный пакет, который будет выпущен в следующий раз. Не все пакеты, о которых говорят люди в Интернете, выпущены в одной и той же версии.
➜ lerna-repo git:(master) ✗ lerna changed
info cli using local version of lerna
lerna notice cli v3.14.1
lerna info Looking for changed packages since v0.1.4
daybyday #只改过这一个 那下次publish将只上传这一个
lerna success found 1 package ready to publish
lerna publish
Пометит, загрузит git, загрузит npm.
Если ваше имя пакета ограничено, например:"name": "@gp0320/gpwebpack",
Это нужно добавить в packages.json
"publishConfig": {
"access": "public"
},
lerna publish
lerna info current version 0.1.4
#这句意思是查找从v0.1.4到现在改动过的包
lerna info Looking for changed packages since v0.1.4
? Select a new version (currently 0.1.4) Patch (0.1.5)
Changes:
- daybyday: 0.1.3 => 0.1.5 #只改动过一个
...
Successfully published:
- daybyday@0.1.5
lerna success published 1 package