Подробное объяснение учебника Lerna по китайскому языку

внешний фреймворк

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зависимости внутри

  • --devdevDependencies переопределить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