初始化項目
yarn init -y
添加workspaces 支持
修改package.json
{
"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