使用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 相关文章推荐
JScript 脚本实现文件下载 一般用于下载木马
Oct 29 Javascript
js DataSet数据源处理代码
Mar 29 Javascript
浅谈JavaScript中的String对象常用方法
Feb 25 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
Mar 14 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
Jun 12 Javascript
js结合正则实现国内手机号段校验
Jun 19 Javascript
javascript实现不同颜色Tab标签切换效果
Apr 27 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
Aug 18 Javascript
Angular中支持SCSS的方法
Nov 18 Javascript
微信小程序接入腾讯云验证码的方法步骤
Jan 07 Javascript
实例讲解React 组件生命周期
Jul 08 Javascript
JavaScript实现H5接金币功能(实例代码)
Feb 22 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
便携利器 — TECSUN PL-365简评
2021/03/02 无线电
jQuery UI AutoComplete 自动完成使用小记
2010/08/21 Javascript
jquery获取下拉列表的值为null的解决方法
2011/03/18 Javascript
javascript分页代码(当前页码居中)
2012/09/20 Javascript
js数组的操作指南
2014/12/28 Javascript
JQuery选择器绑定事件及修改内容的方法
2015/01/23 Javascript
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
解决js函数闭包内存泄露问题的办法
2016/01/25 Javascript
简单谈谈json跨域
2016/03/13 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
2016/12/20 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
完美解决iview 的select下拉框选项错位的问题
2018/03/02 Javascript
微信小程序自定义导航栏
2018/12/31 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
2019/09/12 Javascript
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
[03:56]DOTA2完美大师赛趣味视频之小鸽子和Mineski打台球
2017/11/24 DOTA
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
pycharm安装和首次使用教程
2018/08/27 Python
python实现扫描局域网指定网段ip的方法
2019/04/16 Python
pytorch之Resize()函数具体使用详解
2020/02/27 Python
Python小白不正确的使用类变量实例
2020/05/29 Python
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
Mixbook加拿大:照片书,照片卡,剪贴簿,年历和日历
2017/02/21 全球购物
SCDKey德国:全球领先的数字游戏市场
2019/04/09 全球购物
会计毕业生求职简历的自我评价
2013/10/20 职场文书
毕业生个人的求职信范文
2013/12/03 职场文书
好的演讲稿开场白
2013/12/30 职场文书
会计岗位描述
2014/02/22 职场文书
《真想变成大大的荷叶》教学反思
2014/04/14 职场文书
2014年个人业务工作总结
2014/11/17 职场文书
2014年青年志愿者工作总结
2014/12/09 职场文书
同事离别感言
2015/08/04 职场文书
赡养老人协议书范本
2015/08/06 职场文书
Javascript中Microtask和Macrotask鲜为人知的知识点
2022/04/02 Javascript