关于SegmentFault:Lerna-中文教程详解

30次阅读

共计 3267 个字符,预计需要花费 9 分钟才能阅读完成。

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 $_
    npm 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

Set up

Set up git + npm

✗ git remote add origin git@gitlab.yourSite.com:gaopo/lerna-gp.git
#查看是否登录
✗ npm whoami
xiao2280
#没有则登录 
npm login 
# 输出 username password 
Logged in as gp0320 on https://registry.npmjs.org/. # succeed

Set up yarn 的 workspaces 模式

默认是 npm, 而且每个子 package 都有本人的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]

创立一个包,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 <package>[@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,so,run 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 <path-to-external-repository>

导入本地曾经存在的包

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 link

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

会打 tag,上传 git, 上传 npm。
如果你的包名是带 scope 的例如:"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

正文完
 0