Lerna是一個工具,它優化了使用git和npm管理多包存儲庫的工做流。vue
vue,babel,react等都在用。我司也在用。文檔是英文,我便簡單總結一篇,但願對你們有幫助。node
vue,babel都是用這種,在publish
的時候,會在lerna.json
文件裏面"version": "0.1.5",
,依據這個號,進行增長,只選擇一次,其餘有改動的包自動更新版本號。react
lerna init --independent
初始化項目。lerna.json
文件裏面"version": "independent",
webpack
每次publish
時,您都將獲得一個提示符,提示每一個已更改的包,以指定是補丁、次要更改、主要更改仍是自定義更改。git
$ 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 4 directories, 5 files
✗ 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, 並且每一個子package都有本身的node_modules
,經過這樣設置後,只有頂層有一個node_modules
package.json and lerna.json
# package.json 文件加入 "private": true, "workspaces": [ "packages/*" ], # lerna.json 文件加入 "useWorkspaces": true, "npmClient": "yarn",
建立一個包,name包名,loc 位置可選
# 根目錄的package.json "workspaces": [ "packages/*", "packages/@gp0320/*" ], # 建立一個包gpnote默認放在 workspaces[0]所指位置 lerna create gpnote # 建立一個包gpnote指定放在 packages/@gp0320文件夾下,注意必須在workspaces先寫入packages/@gp0320,看上面 lerna create gpnote packages/@gp0320
增長本地或者遠程package
作爲當前項目packages
裏面的依賴
--dev
devDependencies 替代 dependencies
--exact
安裝準確版本,就是安裝的包版本前面不帶^
, Eg: "^2.20.0" ➜ "2.20.0"
# 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
默認是npm i,由於咱們指定過yarn,so,run yarn install,會把全部包的依賴安裝到根node_modules
.github
列出全部的包,若是與你文夾裏面的不符,進入那個包運行yarn init -y
解決web
➜ lerna-gp git:(master) ✗ lerna list lerna notice cli v3.14.1 daybyday gpnode gpnote gpwebpack lerna success found 4 packages
導入本地已經存在的包npm
lerna run < script > -- [..args] # 運行全部包裏面的有這個script的命令 $ lerna run --scope my-component test
運行任意命令在每一個包json
$ 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
項目包創建軟鏈,相似npm linkbootstrap
刪除全部包的node_modules目錄
列出下次發版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
會打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