溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

利用webpack和rollup怎么對組件庫進(jìn)行打包

發(fā)布時(shí)間:2021-02-25 16:27:58 來源:億速云 閱讀:250 作者:Leah 欄目:開發(fā)技術(shù)

本篇文章為大家展示了利用webpack和rollup怎么對組件庫進(jìn)行打包,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

webpack和rollup對比

webpack算是使用程序員使用最多的打包工具,面試中往往會問到webpack的相關(guān)問題,而rollup被問到的要少很多。導(dǎo)致這種現(xiàn)象的一個(gè)原因是,應(yīng)用開發(fā)使用webpack,庫開發(fā)使用rollup的說法。

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

這次算是一個(gè)打包的實(shí)驗(yàn),我們使用兩個(gè)工具都對這個(gè)項(xiàng)目打一次包。

使用webpack打包

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

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

webpack打包需要用到很多庫來處理不同的文件,這個(gè)項(xiàng)目比較小,就只用了兩個(gè)庫。

// 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的文件名
  })
 ],
}

本來應(yīng)該寫開發(fā)和生產(chǎn)兩個(gè)環(huán)境下的配置,但在這里只寫了production環(huán)境下的配置。

使用rollup打包

在rollup中使用的庫比較多一點(diǎn)。

// rollup.config.js
// 解決rollup無法識別commonjs的問題
import commonjs from 'rollup-plugin-commonjs'
// babel處理es6代碼的轉(zhuǎn)換
import babel from 'rollup-plugin-babel'
// resolve將我們編寫的源碼與依賴的第三方庫進(jìn)行合并
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(),
 ],
}

發(fā)包到npm

發(fā)包到npm只需要幾個(gè)命令。

npm pack

對項(xiàng)目打包后,命令行輸出壓縮包的詳細(xì)信息。

利用webpack和rollup怎么對組件庫進(jìn)行打包

更新版本

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

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

最后使用發(fā)布命令。

npm publish

上述內(nèi)容就是利用webpack和rollup怎么對組件庫進(jìn)行打包,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI