使用webpack和rollup打包組件庫的方法

前言

之前做瞭一個loading的樣式組件,為瞭實現代碼的可重用性,將這個小項目打包並且發佈在瞭npm上。在一次次的打包發包過程中經歷瞭一個有一個報錯,@buzuosheng/loading這個組件已經到瞭2.7.0版本,雖然還有一些要調整的地方,但總算是可以用瞭。

webpack和rollup對比

webpack算是使用程序員使用最多的打包工具,面試中往往會問到webpack的相關問題,而rollup被問到的要少很多。導致這種現象的一個原因是,應用開發使用webpack,庫開發使用rollup的說法。

但是兩個打包工具都有很強大的插件開發功能,功能差異越來越模糊,但是rollup使用起來更加簡潔,而且能打出能小體積的文件。但當我們做前端應用時,性能分析往往要求更小的庫,所以rollup更符合開發庫的要求。

這次算是一個打包的實驗,我們使用兩個工具都對這個項目打一次包。

使用webpack打包

在打包之前,需要給package.json文件中添加或更改一些字段。

{
 // 程序主入口模塊,用戶引用的就是該模塊的導出
 "main": "dist/bundle.js",
 // 項目包含的文件
 "files": [
  "src",
  "dist"
 ],
 // 將react和react-dom移動到該配置中,兼容依賴
 "peerDependencies": {
  "react": "^17.0.1",
  "react-dom": "^17.0.1"
 },
}

webpack打包需要用到很多庫來處理不同的文件,這個項目比較小,就隻用瞭兩個庫。

// webpack.config.js
const path = require('path');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = {
 mode: 'production',
 entry: './src/Loading.jsx',
 output: {
  filename: "index.js",
  path: path.join(__dirname, "./dist/"),
  libraryTarget: 'umd',
 },
 optimization: {
  minimize: false,
 },
 resolve: {
  extensions: ['.jsx']
 },
 module: {
  rules: [
   {
    test: /\.css$/,
    loader: [MiniCssExtractPlugin.loader, 'css-loader?modules'],
   },
   {
    test: /\.(js|jsx)$/,
    loader: "babel-loader",
    exclude: /node_modules/,
   },
  ]
 },
 plugins: [
  new MiniCssExtractPlugin({
   filename: "main.min.css" // 提取後的css的文件名
  })
 ],
}

本來應該寫開發和生產兩個環境下的配置,但在這裡隻寫瞭production環境下的配置。

使用rollup打包

在rollup中使用的庫比較多一點。

// rollup.config.js
// 解決rollup無法識別commonjs的問題
import commonjs from 'rollup-plugin-commonjs'
// babel處理es6代碼的轉換
import babel from 'rollup-plugin-babel'
// resolve將我們編寫的源碼與依賴的第三方庫進行合並
import resolve from 'rollup-plugin-node-resolve'
// postcss處理css文件
import postcss from 'rollup-plugin-postcss'

export default {
 input: "src/Loading.jsx",
 // 打包一份cjs和一份es的文件
 output: [
  {
   file: "dist/loading.es.js",
   format: "es",
   globals: {
    react: 'React',
   },
  }, {
   file: 'dist/loading.cjs',
   format: "cjs",
   globals: {
    react: 'React',
   },
  },
 ],
 external: ['react'],
 plugins: [
  postcss(
   { extensions: ['.css'] }
  ),
  babel({
   exclude: "node_modules/**",
   runtimeHelpers: true,
  }),
  commonjs(),
  resolve(),
 ],
}

發包到npm

發包到npm隻需要幾個命令。

npm pack

對項目打包後,命令行輸出壓縮包的詳細信息。

更新版本

npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease [--preid=<prerelease-id>] | from-git]

根據本次改動的大小選擇不同的命令。

最後使用發佈命令。

npm publish

然後就會收到郵件,你的包已經發佈成功。

到此這篇關於使用webpack和rollup打包組件庫的方法的文章就介紹到這瞭,更多相關webpack和rollup打包組件庫內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: