初始化项目
yarn init -y
添加workspaces 支持
{
"name": "second",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"private":true,
"workspaces":["common","server"]
}
创建common && server 模块
- common
yarn init -y
├── index.js
└── package.json
index.js
module.exports={
name:"dalong-common",
type:"common"
}
- server 调用common
yarn init -y
├── index.js
└── package.json
package.json
{
"name": "server",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
"common": "1.0.0"
}
}
index.js
const common =require("common");
console.log(common);
安装模块
yarn install
效果
代码调用测试
node server
{ name: 'dalong-common', type: 'common' }
lerna 格式支持
- 项目结构
├── package.json
├── packages
│ ├── common
│ │ ├── index.js
│ │ └── package.json
│ └── server
│ ├── index.js
│ └── package.json
└── yarn.lock
主要是 package.json
{
"name": "second",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"private":true,
"workspaces":[
"packages/*"
]
}
以及packages 文件夹,其他地方不变
yarn install && node packages/server
几个问题
- 包版本的问题
比如我的项目comon 默认是1.0.0 但是如果我server 引用了1.1.0 ,但是因为本地是没有的,
会使用官方仓库的,这个实际上,在使用中还是要确定好版本,同时还是需要私服进行归档
进行历史版本的管理,确定好包的名称,使用私服格式
说明
版本管理本来就是比较复杂的事情,类似yarn 的有lerna 同时又一个概念monorepo,
bable react 就是使用类似的方式进行官方组件的维护的,还是不错的,减少了包的问题
但是也有缺点,就是依赖过大,总的来说yarn 还是比较简单的,lerna 功能比较多,但是
实际上内部团队用的可能没有那么多,同时比较好的地方是三方以及本地依赖统一一个地方,依赖包
不用必须提交代码仓库
参考资料
https://yarnpkg.com/blog/2017/08/02/introducing-workspaces/
https://lernajs.io/
https://github.com/rongfengliang/yarn-workspaces-demo