使用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 相关文章推荐
(JS实现)MapBar中坐标的加密和解密的脚本
May 16 Javascript
基于jQuery的简单的列表导航菜单
Mar 02 Javascript
火狐4、谷歌12不支持Jquery Validator的解决方法分享
Jun 20 Javascript
JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
Apr 07 Javascript
Angular 路由route实例代码
Jul 12 Javascript
Vue.js学习教程之列表渲染详解
May 17 Javascript
vue实现移动端图片裁剪上传功能
Aug 18 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
Dec 08 Javascript
JavaScript实现求最大公共子串的方法
Feb 03 Javascript
解决循环中setTimeout执行顺序的问题
Jun 20 Javascript
关于微信公众号开发无法支付的问题解决
Dec 28 Javascript
JS实现压缩上传图片base64长度功能
Dec 03 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
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
杨氏矩阵查找的JS代码
2013/03/21 Javascript
js实现幻灯片效果(基于jquery插件)
2013/11/05 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
angularJS 入门基础
2015/02/09 Javascript
对Web开发中前端框架与前端类库的一些思考
2015/03/27 Javascript
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
2016/08/05 Javascript
Vue.JS入门教程之列表渲染
2016/12/01 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
浅析vue插槽和作用域插槽的理解
2019/04/22 Javascript
jQuery实现input[type=file]多图预览上传删除等功能
2019/08/02 jQuery
Python中的Descriptor描述符学习教程
2016/06/02 Python
详解python上传文件和字符到PHP服务器
2017/11/24 Python
python进阶之多线程对同一个全局变量的处理方法
2018/11/09 Python
Django的Modelforms用法简介
2019/07/27 Python
python在OpenCV里实现投影变换效果
2019/08/30 Python
python实现多进程通信实例分析
2019/09/01 Python
把vgg-face.mat权重迁移到pytorch模型示例
2019/12/27 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
Python yield的用法实例分析
2020/03/06 Python
Python求解排列中的逆序数个数实例
2020/05/03 Python
澳大利亚在线百货商店:Real Smart
2017/08/13 全球购物
网上签名寄语活动留言
2014/01/18 职场文书
特色冷饮店创业计划书
2014/01/28 职场文书
个人作风纪律整顿整改措施
2014/10/25 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书
2014年禁毒工作总结
2014/11/24 职场文书
2015年度服装销售工作总结
2015/03/31 职场文书
军训后的感想
2015/08/07 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL
HTML静态页面获取url参数和UserAgent的实现
2022/08/05 HTML / CSS
微软Win11 全新照片应用面向 Dev预览版推出 新版本上手体验图集
2022/09/23 数码科技
详解MySQL的内连接和外连接
2023/05/08 MySQL