# Lerna
提供了一种集中管理package的目录模式,提供了一套自动化管理程序。让开发者在根项目就可以全局掌控(基于npm scripts
)
将多个子包放到一个大工程下,然后通过packages
里管理它们。
注意: 这些子包的仓库只有一个,也就是这个大工程。
# 初始化lerna工程
lerna init
会创建一个最普通的lerna脚手架:
lerna-repo/
packages/
package.json
lerna.json
Lerna-debug.json // 存储错误日志
2
3
4
5
# 创建子包
会在packages
下新建一个子包,供lerna统一管理。
lerna create pkg-name
# 导入子包
lerna package <path>
lerna会将指定路径的工程全部导入到packages
下,并将所有的commit记录一并提交
注:这种形式下,子包的所在仓库依然是属于根目录工程下的
# 本地开发时,引用其他包
# lerna clean 清除所有子包的node_modules文件夹
# 注意
不要将子包设为private: true
,否则它在lerna内的功能将受影响。
# 将子包间的依赖转为软链
软链优先级:.babelrc
里的alias
(Web) > lerna link
# 其它
在RN项目中,遇到软链失效时,可以参考:
# 软链后,提示Module not found: Can't resolve xxx
可能由于webpack 设置了 alias
导致(但显示的依然是alias
的名字)。
webpack.alias -> 去子包里找不到
真身
// demo工程:
// webpack.config.js
resolve: {
alias: {
'react-native$': '@music/react-native-web-suffix',
'@music/rn-util$': '@music/rn-util-web',
'@music/mnb-rn$': '@music/mnb-music',
}
},
2
3
4
5
6
7
8
9
一旦 webpack
里设置 alias
,工程里遇到react-native
。若react-native
在子包里也有被引用到,就会先去 被引子包
(-rn)里取找这个包(@music/react-native-web-suffix
)
# 软链失效,先检查版本
若-core
被-h5
引用,但发现-h5
内的-core
并不是本地的,检查-core
的版本是否和-h5
的package-lock.json
中对的上
# 提示 script 所用的包不存在
将 package-lock.son
删除,再 npm i
# lerna publish
解决:
nenpm whoami
检查是否已登录;未登录则nenpm login
;- 若已登录,可能与
~/.npmrc
内的authToken
无效有关: cat ~/.nenpmrc
,将下面这行复制到~/.npmrc
即可
//rnpm.hz.netease.com/:_authToken=xxx
- 若还是不行,重置
nenpm
密码 (opens new window)后重试 第3步。
# watchman error
Watchman error: too many pending cache jobs. Make sure watchman is running for this project.
# module和main字段的优先级
# peerDependencies
# jest-haste-map: Haste module naming collision: react-native
添加metro.config.js
的blacklist
:
https://stackoverflow.com/questions/41813211/how-to-make-react-native-packager-ignore-certain-directories
# 所有lerna bootstrap 会导致
# 重装watchman,发生homebrew报错
cd /usr/local/Homebrew/Library/Taps/homebrew
rm -rf homebrew-core
brew upgrade
2
3
使用brew upgrade后会重新更新homebrew-core
# 使用sdp发布时,lerna接收参数前需进行转换
"build:demo:web": "lerna run --scope @music/rpc-audio-rn build:web -- -- ",
https://github.com/lerna/lerna/issues/1106