关于
大型的代码库 拆分为 独立的版本包 对 代码共享非常有用,然而,要对这么 多的存储库进行更改是如此凌乱且难以追踪,还有还有 跨存储库测试 也变得非常复杂。
为了解决这样 (那样) 的问题, 一些项目组会将他们的基础代码库分组成多个包库. 像 Babel, React, Angular, Ember, Meteor, Jest 和 其他项目组开发他们的包都是在一个repo库.
Lerna 搭配 git 与 npm 优化了管理多个包库的工作流程.
入门
让我们用 npm 全局下载开始:
Lerna 2.x是推荐的版本.
npm install --global lerna
接下来我们将创建一个新的git存储库:
git init lerna-repo && cd lerna-repo
现在让我们把它变成一个Lerna项目:
lerna init
您的存储库现在应该如下所示:
lerna-repo/
packages/
package.json
lerna.json
命令
以下是每个命令的简要介绍。 请浏览 README 获取更多信息.
lerna init
创建一个新的lerna repo 或 将现有的repo升级到当前版本的Lerna。
Options
--independent
/-i
– 使用独立版本控制模式.
lerna bootstrap
在当前的Lerna仓库中引导包。安装所有依赖项并链接任何跨库依赖项
此命令至关重要,因为它允许您 require()
一些包名称来使用,就好像包已经存在并在您的 node_modules
文件夹.
lerna import <pathToRepo>
导入 <pathToRepo> 这个本地路径的提交记录到packages/<directory-name>.
lerna publish
创建软件包的新版本用以更新. 提示新版本并更新 git和npm 上的所有软件包。
选项
--npm-tag [tagname]
— 发布 tagname版本 到npm (默认是最新的).
--canary
/-c
– 创建 canary 版本.
--skip-git
– 不要运行任何git命令
--force-publish [packages]
— 强制发布指定的包(逗号分隔)或所有包使用
*
(跳过git diff检查更改的包).
lerna changed
检查自上次发布以来哪些软件包已更改.
lerna diff [package?]
自上次发布以来,所有包或单个包的变化.
lerna run [script]
运行一个npm script 在每个包含这个脚本的包.
lerna ls
列出当前Lerna项目中的所有公共包.
谁在用 lerna ?
- primer/primer
- babel/babel
- facebook/create-react-app
- ReactTraining/react-router
- pugjs/pug
- facebook/jest
- palantir/blueprint
- reactotron/reactotron
- ElemeFE/mint-ui
- devtools-html/debugger.html
- alibaba/rax
- Turfjs/turf
- babel/babili
- storybooks/storybook
- xmppjs/xmpp.js
- wooorm/retext
- jumpsuit/jumpsuit
- strapi/strapi
- cloudflare/cf-ui
- colmena/colmena
- angus-c/just
- cerebral/cerebral
- nteract/nteract
- wooorm/remark
- rofrischmann/fela
- tbranyen/diffhtml
- ElemeFE/cooking
- antwarjs/antwar
- apollostack/graphql-server
- jimpick/lambda-comments
- lystable/recon
- marudor/flowInterfaces
- GoogleChrome/sw-helpers
- webpack-preset/webpack-preset
- vazco/uniforms
- metal/metal.js
- steelbrain/pundle
- neos/neos-ui
- mosjs/mos
- lore/lore
- act-framework/act
- yvele/poosh
- noderaider/gridiron
- superawesomelabs/leo
- tocco/tocco-client
- zalando-incubator/tessellate
- sencha/extjs-reactor
- DigitalRiver/react-atlas
- forivall/tacoscript
- Boxable/box-ui
- flux-capacitor/flux-capacitor
- trepo/trepo-js
- spacedoc/spacedoc
- oknosoft/metadata.js
- uber-web/uber-eslint
- brittanica/brittanica
- openzipkin/zipkin-js
- vudash/vudash
- nteract/commuter
- frintjs/frint
- fyndiq/fyndiq-ui
- azu/immutable-array-prototype
- TrueCar/gluestick
- KELiON/create-cerebro-plugin
- phenomic/phenomic
- sterjakovigor/vqua
- wireapp/wire-web-packages
- klis87/redux-saga-requests
- WordPress/packages
- react-cosmos/react-cosmos
- jsbites/jedifocus-monorepo
- FoalTS/foal
- emotion-js/emotion
- Bamieh/reflow
- transloadit/uppy
- olistic/warriorjs
- gatsbyjs/gatsby