在 react 或者 vue 項目里面,目前來說代碼或者組件的復用,一般采用三種方式。
1、自己手動配置 webpack ,使用 HtmlWebpackPlugin 構建多個入口項目,共享一些代碼組件。
缺點:需要對 webpack 掌握較好,多個 HtmlWebpackPlugin 導致熱更新 打包變慢 。
優點:可控性高。
2、使用 npm 公共的庫。
缺點:不能實時修改,對於一些業務相關的重復代碼,可能需要頻繁修改。
優點:分離的很徹底 ,獨立維護,隨處可用
3、使用 lerna 工具
缺點: 項目的git 權限控制比較麻煩
優點: 實時修改。
這里主要介紹 lerna 的使用:
一、安裝
npm i lerna -g
二、初始化
新建一個文件夾: lerna_demo,進入
lerna init
三、導入項目
lerna import 你本地的項目路徑
例如: 在我本地的電腦的 f 盤有個舊的 react 項目
如果沒有,可以新建幾個項目如下:
npx create-react-app admin --template typescript npx create-react-app web --template typescript npx create-react-app common --template typescript
最后就是這幾個文件:

在 lerna_demo 里面,導入幾個項目:
lerna import F:\admin lerna import F:\web lerna import F:\common
四、結果
在 lerna_demo/packages 里面,就會多出幾個工程

四、可能的錯誤
1、項目在導入的時候,會合並 git 的提交記錄,所以項目的代碼要都提交了的。如果有修改可以執行:
git add . git commit -m "合並"
五、使用 yarn


lerna.json
{
"packages": [
"packages/*"
],
"version": "0.0.0",
"npmClient": "yarn",
"useWorkspaces": true,
"command": {
"publish": {
"ignoreChanges": [
".gitignore",
"*.log",
"*.md"
]
},
"bootstrap": {
"ignore": "npm-*",
"npmClientArgs": [
"--no-package-lock"
]
}
}
}
package.json
{
"name": "root",
"private": true,
"devDependencies": {
"lerna": "^4.0.0"
},
"workspaces": [
"packages/*"
],
"scripts": {
"bootstrap": "lerna bootstrap && lerna link",
"clean": "lerna clean --yes",
"all-dev": "lerna run start",
"all-build": "lerna run build",
"admin": "lerna run start --scope=admin --stream",
"web": "lerna run start --scope=web --stream",
"test": "lerna run test --stream"
}
}
六、修改lerna -> common 里面的 package.json

同時也在 admin->package.json 里面加入 依賴,當然也可以不加。

七、在common 里面加入代碼:

在 admin 里面使用:

八、運行指令安裝模塊
yarn bootstrap
九、運行 admin 項目
yarn admin
十、參考文檔:
https://segmentfault.com/a/1190000023160081
https://github.com/lerna/lerna#getting-started
