Open zWingz opened 5 years ago
为啥你的字体这么小这么好看....怎么设置的
还有就是问个问题。我lerna create xxx之后。我根目录的node_modules下为什么没有我新create的子项目的软连接呢。望解惑!
@vayne1Q 应该是有相互依赖的子模块才会建立软连接, 根目录不依赖子模块吧
@vayne1Q 应该是有相互依赖的子模块才会建立软连接, 根目录不依赖子模块吧
哦哦。这样嘛。我一直理解成了只要通过lerna create创建的子项目。就会在根目录下的node_modules创建软连接呢。现在知道了。谢谢作者
lerna用于管理多
package
,且各package
可能会互相引用的项目。lerna
通过两种方式管理子项目的版本号:lerna publish
都会将所涉及到的包升级到最新一个版本,开发者只需要确定发布下一个version
。version
,每次执行lerna publish
都需要确定每个包的下个版本号。基本使用
以下命令以
yarn
为主。Install 安装
yarn global add lerna
Init 初始化项目
lerna init
命令执行完毕后,会在生成对应的目录结构。Lerna.json 配置
Create 创建子项目
lerna create <name>
创建一个子项目,并会根据交互提示生成对应的package.json
Add 添加依赖
lerna add <package>[@version] [--dev] [--exact]
lerna add eslint
: 所有包都会装上eslint
。lerna add eslint --scope=package1
:只有package1
会装上。lerna add eslint packages/prefix-*
:符合prefix
的包会装上。options:
-dev
:添加到devDependencies
--exact
: 只安装特定版本如果添加的是子项目,则会通过
link
软连接到对应的项目中。lerna add package1 --scope=package2
Run 执行npm script命令
lerna run <script> -- [..args]
lerna run test
:则会执行所有子项目中的test
。lerna run --scope package1 test
:只执行package1
中的test
。lerna run --ignore package-* test
:只执行除了匹配package-*
外的项目中的test
Exec 执行任意命令
lerna exec -- <command> [..args]
与
lerna run
类似,只不过它可以执行任意命令。 eg:lerna exec -- rm -rf ./node_modules
其他命令
lerna bootstrap
:安装各子项目依赖,对相互引用的项目进行软连接,在子项目中执行npm run prepublish
和npm run prepare
--hoist [glob]
:会将子项目的匹配的依赖(eg:eslint
,jest
等),统一放在根目录的node_modules
中,减少安装时间,但仅限npmClient=npm
—nohoist [glob]
: 匹配的依赖(eg:babel
)会安装到子项目中的node_modules
中lerna clean
:删除子项目的node_modules
lerna link
:同bootstrap
第二步。进阶使用
Lerna-changelog
lerna-changelog基于
pr
来为项目生成changelog
可参考repo
使用步骤
master
分支切换出feature
/bugfix
等分支,参考git-flow。commit
,推荐使用commitizen来规范commit msg
,同时有助于对后续子项目生成changelog
。push
到remote
端。pr
,并打上label
,此处一定要打上label
,learn-changelog
就是根据label
来确定该pr
属于feature
/bugfix
/document
等。merge
之前打上label
。merge pr
操作。master
分支并进行pull
操作。lerna-changelog
,既可得到一份changeling
。注意
pr
的label
并不能随意设置,一定要在项目中声明对应才生效。官方默认支持
breaking
/enhancement
/bug
/documentation
/internal
,如果想用其他,则需要在package.json
中进行相应的配置。子项目的changelog
尚未实践过,具体还需参考README
结语
lerna
的使用已介绍完毕,上述内容可满足日常开发需求,更多详情还需参考官方文档。