Workspaces中没有自己的yarn.lock文件,在根文件夹的yarn.lock包含所有Workspaces的依赖项。
从Lerna 2.0.0开始,当你通过-use-workspaces
标志运行Lerna的命令时,它将会使用Yarn来引导项目,并且还会使用package.json/workspaces
字段来查找依赖,而不是使用lerna.json/packages。
###子模块引用不同版本依赖的问题###
lerna bootstrap
lerna
提供了可以将子项目的依赖包提升到最顶层的方式 ,我们可以执行 lerna clean
先删除每个子项目的 node_modules
, 然后执行命令 lerna bootstrop --hoist
。
lerna bootstrop --hoist
会将 packages
目录下的公共模块包抽离到最顶层,但是这种方式会有一个问题,不同版本号只会保留使用最多的版本,这种配置不太好,当项目中有些功能需要依赖老版本时,就会出现问题。
yarn
有没有更优雅的方式?再介绍一个命令 yarn workspaces
,可以解决前面说的当不同的项目依赖不同的版本号问题, yarn workspaces
会检查每个子项目里面依赖及其版本,如果版本不一致都会保留到自己的 node_modules
中,只有依赖版本号一致的时候才会提升到顶层。注意:这种需要在 lerna.json
中增加配置。
"npmClient": "yarn", // 指定 npmClent 为 yarn "useWorkspaces": true // 将 useWorkspaces 设置为 true
并且在顶层的 package.json
中增加配置
// 顶层的 package.json { "workspaces":[ "packages/*" ] }
增加了这个配置后 不再需要 lerna bootstrap
来安装依赖了,可以直接使用 yarn install
进行依赖的安装。注意:yarn install
无论在顶层运行还是在任意一个子项目运行效果都是可以。
###lerna add 同名scope 问题:###
子模块于第三方依赖名称相同的情况,修改自己的scope即可;
###私服配置###
yarn 项目根目录下配置参考:https://blog.csdn.net/qq_28077405/article/details/106516576
yarn 使用全局或者执行目录下同级的.yarnrc配置,子模块的.yarnrc配置默认不会被读取, 可以使用,命令参数指定配置文件:
--use-yarnrc <path> specifies a yarnrc file that Yarn should use (.yarnrc only, not .npmrc) (default: )
###lerna publish 问题###
### lerna exec --scope 子模块目录名 -- yarn serve ###
报错: No PostCSS Config found in: D:\project\xljx\demo\lerna-demo-independent\node_modules\normalize.css
将对应子模块下的postcss 配置文件拷贝置lerna项目根目录下,运行正常,说明为相对路径问题!!!
日志规范
commitizen 和 cz-lerna-changelog
commitlint && husky
standardjs && lint-staged
Reference:
https://blog.csdn.net/weixin_35944230/article/details/112713841
https://mp.weixin.qq.com/s/JdbJ7g0_m1jz5hW7NZt6ag
一个子模块即为一个workspaces;
yarn workspaces : https://www.dazhuanlan.com/2019/12/25/5e027015a4775/
没有帐号? 立即注册