項目github地址css
最近準備抽離一些組件,因此就動手搭建了一個基礎打包項目,該有的功能基本都有,功能以下:vue
支持使用
babel-plugin-import
插件按需引入,同時項目也支持多入口打包,能夠單獨引入某個入口打包文件,達到按需引入的目的.webpack
支持
rollup
和vue cli3
兩種方式打包成庫文件,rollup
支持多種格式打包,只須要執行不一樣的npm命令便可git
保留
vue cli3
當作example示例啓動架子,支持vuepress文檔,採用類是element-ui文檔風格的組件展現.使用jest當作項目測試工具es6
內置了
eslint
,styleline
,commitlint
,prettier
,conventional
等多個插件來規範代碼,保證代碼質量github
拉取項目代碼 github.com/anncwb/lib-…到本地 一些目錄說明web
.
├── build
│ ├── cli.build.js // vue cli3打包配置
│ ├── rollup.build.js // rollup打包配置
│ ├── rollup.createConfig.js
│ └── utils.js
├── config
│ └── rollup.build.config.js // rollup打包類型配置
├── docs // 開發文檔
├── examples // 開發示例
├── lib // 打包後的文件
│ └── theme 打包後的css文件
├── packages // 子模塊
├── src
│ ├── index.js // 主入口
│ └── lib-list.js // 模塊打包配置
├── tests // 測試文件
├── types // 類型定義文件
複製代碼
在package下面新建組件或者js庫,這裏使用的是vue來作測試例子,組件編寫須要提供js文件以下index.js
npm
在src下面建立index.js
文件,將全部組件引入,並導出 element-ui
打包前須要本身編寫一個打包入口文件,用於多入口打包,沒作成自動獲取,本身動手寫把, 在 src下面新建 lib-list.js
文件,文件名必須一致且不能使用es6語法導出 lib-list.js:json
module.exports = { index: { input: 'src/index.js', output: 'index' }, 'file-handle': { input: 'packages/file-handle/index.js', output: 'file-handle' }, 'test-module': { input: 'packages/test-module/index.js', output: 'test-module' } } 複製代碼
lib-list.js說明
input: 你須要打包的入口,這裏須要使用js,因此package的組件必須提供js入口文件
output: 打包後的組件名,打包後會在lib
目錄下生成對應的文件
rollup打包
若是項目偏向於庫文件, 建議使用rollup打包
執行npm run lib
便可,
使用vue cli3(webpack)打包
若是項目偏向於UI庫,包含比較多的靜態文件, 建議使用這種方式打包 執行npm run lib:cli
便可
完成後會顯示打包成功字樣就能夠了,同時會生成lib目錄,就是你到包後的文件,
同時兩種打包方式,默認輸出的lib文件名會如出一轍,方便切換,固然,你也能夠自行更改
這裏就再也不說如何發佈到npm了,你們自行百度,注意將package.json的main指向lib/index.js
便可
使用 babel-plugin-import
實現按需加載
yarn add xxx
我這裏是
yarn add vue-lib-starter
複製代碼
yarn add babel-plugin-import -D
複製代碼
module.exports = { .... plugins:[ [ 'import', { // 組件庫的名字,能夠根據你發佈的庫的package.json的name自行更改 libraryName: 'vue-lib-starter', // 默認打包是lib,不用更改 libraryDirectory: 'lib', // 若是有樣式文件,由於打包後樣式統一放在/lib/theme下,因此須要稍微轉換下 style: (name, file) => { const libDirIndex = name.lastIndexOf('/') const libDir = name.substring(0, libDirIndex) const fileName = name.substr(libDirIndex + 1) return `${libDir}/theme/${fileName}.css`; } } ] ] } 複製代碼
import { TestModule } from 'vue-lib-starter' 會轉化成下面: js: import TestModule from 'vue-lib-starter/lib/test-module.js' css: import 'vue-lib-starter/lib/theme/test-module.css' 複製代碼
手動按需引入,打包後出了統一的入口文件,還能夠本身打包多個入口,若是有配置,能夠直接引入本身須要的組件:
import TestModule from 'vue-lib-starter/lib/test-module.js' import 'vue-lib-starter/lib/theme/test-module.css' 複製代碼
這樣便可完成按需引入,兩種方式其實最終效果都同樣
集成了vuepress做爲文檔編寫工具,具體使用請參考官方文檔
eslint
和stylelint
規則可能跟你的項目,須要自行修改git
提交的message
進行校驗,請確保你的message個是符合commitline規則,具體能夠查看根目錄下commitlint.config.js
lib-list.js
必須有,不然會出錯npm run lint:prettier
執行會格式化所有js和ts文件,謹慎這行npm run lint:css
執行可能會報錯,由於項目的目錄下沒有css文件npm run version
生成變動日誌的前提是你要符合上面的commitlint.config.js提交規範更多的細節能夠自行拉取代碼查看
因爲是時間比較少,就一天左右的時間弄出來的,有些東西可能沒考慮全,你們能夠本身根據本身的需求修改代碼,僅提供個人代碼參考而已