使用webpack和rollup打包组件库的方法


Posted in Javascript onFebruary 25, 2021

前言

之前做了一个loading的样式组件,为了实现代码的可重用性,将这个小项目打包并且发布在了npm上。在一次次的打包发包过程中经历了一个有一个报错,@buzuosheng/loading这个组件已经到了2.7.0版本,虽然还有一些要调整的地方,但总算是可以用了。

使用webpack和rollup打包组件库的方法

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

对项目打包后,命令行输出压缩包的详细信息。

使用webpack和rollup打包组件库的方法

更新版本

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

根据本次改动的大小选择不同的命令。

最后使用发布命令。

npm publish

然后就会收到邮件,你的包已经发布成功。

到此这篇关于使用webpack和rollup打包组件库的方法的文章就介绍到这了,更多相关webpack和rollup打包组件库内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
用Javscript实现表单复选框的全选功能
May 25 Javascript
javascript 二进制运算技巧解析
Nov 27 Javascript
js操作checkbox遇到的问题解决
Jun 29 Javascript
js操作table示例(个人心得)
Nov 29 Javascript
用json方式实现在 js 中建立一个map
May 02 Javascript
javascript实现的登陆遮罩效果汇总
Nov 09 Javascript
Jquery 效果使用详解
Nov 23 Javascript
Angualrjs和bootstrap相结合实现数据表格table
Mar 30 Javascript
mpvue性能优化实战技巧(小结)
Apr 17 Javascript
Vue 实现前端权限控制的示例代码
Jul 09 Javascript
vue3中轻松实现switch功能组件的全过程
Jan 07 Vue.js
一道JS算法面试题——冒泡、选择排序
Apr 21 Javascript
vue常用高阶函数及综合实例
Feb 25 #Vue.js
原生JS实现音乐播放器的示例代码
Feb 25 #Javascript
详解vite2.0配置学习(typescript版本)
Feb 25 #Javascript
详解vite+ts快速搭建vue3项目以及介绍相关特性
Feb 25 #Vue.js
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
Feb 24 #Javascript
Nest.js散列与加密实例详解
Feb 24 #Javascript
JS canvas实现画板和签字板功能
Feb 23 #Javascript
You might like
PHP计划任务、定时执行任务的实现代码
2011/04/23 PHP
php中使用DOM类读取XML文件的实现代码
2011/12/14 PHP
php 获取百度的热词数据的代码
2012/02/18 PHP
phpMyAdmin通过密码漏洞留后门文件
2018/11/20 PHP
this[] 指的是什么内容 讨论
2007/03/24 Javascript
关于二级域名下使用一级域名下的COOKIE的问题
2011/11/07 Javascript
JavaScript实现获取dom中class的方法
2015/02/09 Javascript
学习Bootstrap滚动监听 附调用方法
2016/07/02 Javascript
将angular-ui的分页组件封装成指令的方法详解
2017/05/10 Javascript
神级程序员JavaScript300行代码搞定汉字转拼音
2017/05/20 Javascript
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
详解angular路由高亮之RouterLinkActive
2018/04/28 Javascript
微信小程序调用摄像头隐藏式拍照功能
2018/08/22 Javascript
[01:43]3.19DOTA2发布会 三代刀塔人第三代
2014/03/25 DOTA
利用matplotlib+numpy绘制多种绘图的方法实例
2017/05/03 Python
python字符串与url编码的转换实例
2018/05/10 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
2018/08/31 Python
Python网页正文转换语音文件的操作方法
2018/12/09 Python
Python实现删除排序数组中重复项的两种方法示例
2019/01/31 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
Django框架模型简单介绍与使用分析
2019/07/18 Python
Python3 翻转二叉树的实现
2019/09/30 Python
如何用Python绘制3D柱形图
2020/09/16 Python
Omio美国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/08 全球购物
最耐用行李箱,一箱永流传:Briggs & Riley(全球终身保修)
2017/12/07 全球购物
linux面试题参考答案(2)
2015/12/06 面试题
Linux如何命名文件--使用文件名时应注意
2012/01/22 面试题
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
2013年入党人员的自我鉴定
2013/10/25 职场文书
小学二年级学生评语
2014/04/21 职场文书
租车协议书范本
2014/04/22 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
交通处罚决定书
2015/06/24 职场文书
心得体会该怎么写呢?
2019/06/27 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
Nginx开启Brotli压缩算法实现过程详解
2021/03/31 Servers