使用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 相关文章推荐
JQuery扩展插件Validate 3通过参数设置错误信息
Sep 05 Javascript
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
Mar 01 Javascript
圣诞节Merry Christmas给博客添加浪漫的下雪效果基于jquery实现
Dec 27 Javascript
jQuery插件passwordStrength密码强度指标详解
Jun 24 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
Nov 01 Javascript
js封装tab标签页实例分享
Dec 19 Javascript
jquery平滑滚动到顶部插件使用详解
May 08 jQuery
javascript 中iframe高度自适应(同域)实例详解
May 16 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
Mar 09 Javascript
简单的三步vuex入门
May 20 Javascript
微信浏览器下拉黑边解决方案 wScroollFix
Jan 21 Javascript
Vue中foreach数组与js中遍历数组的写法说明
Jun 05 Vue.js
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使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
AJAX的跨域与JSONP(为文章自动添加短址的功能)
2010/01/17 Javascript
jquery清空textarea等输入框实现代码
2013/04/22 Javascript
JS访问SWF的函数用法实例
2015/07/01 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
举例说明JavaScript中的实例对象与原型对象
2016/03/11 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
2016/06/26 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
bootstrap模态框消失问题的解决方法
2016/12/02 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
2017/08/31 Javascript
浅谈React之状态(State)
2018/09/19 Javascript
vue框架中props的typescript用法详解
2020/02/17 Javascript
[04:29]2014DOTA2国际邀请赛 主赛事第三日TOPPLAY
2014/07/21 DOTA
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
在Python中使用matplotlib模块绘制数据图的示例
2015/05/04 Python
Python+django实现文件下载
2016/01/17 Python
在python中pandas的series合并方法
2018/11/12 Python
Python 数值区间处理_对interval 库的快速入门详解
2018/11/16 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
itchat-python搭建微信机器人(附示例)
2019/06/11 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
2019/08/30 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
使用Python爬取Json数据的示例代码
2020/12/07 Python
纯CSS3实现移动端展开和收起效果的示例代码
2020/04/26 HTML / CSS
英国独特礼物想法和个性化礼物网站:notonthehighstreet.com
2018/04/16 全球购物
服装销售人员求职自我评价
2013/09/26 职场文书
初中生三年学习生活的自我评价
2013/11/03 职场文书
小车司机岗位职责
2013/11/25 职场文书
电气工程及自动化专业自荐书范文
2013/12/18 职场文书
西北政法大学自主招生自荐信
2014/01/29 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
用人单位终止解除劳动合同证明书
2014/10/06 职场文书
幼儿园辞职信
2015/05/13 职场文书
队列队形口号
2015/12/25 职场文书
对PyTorch中inplace字段的全面理解
2021/05/22 Python