使用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 相关文章推荐
JavaScript中valueOf函数与toString方法深入理解
Dec 02 Javascript
javascript中直接写php代码的方法
Jul 31 Javascript
详解JavaScript中的客户端消息框架设计原理
Jun 24 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
Jan 18 Javascript
深入解析JavaScript中的立即执行函数
May 21 Javascript
js时间比较 js计算时间差的简单实现方法
Aug 26 Javascript
js cookie实现记住密码功能
Jan 17 Javascript
关于使用axios的一些心得技巧分享
Jul 02 Javascript
jQuery AJAX 方法success()后台传来的4种数据详解
Aug 08 jQuery
LayUI表格批量删除方法
Aug 15 Javascript
微信小程序云开发实现云数据库读写权限
May 17 Javascript
微信小程序实现蓝牙打印
Sep 23 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/10/08 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
2013/06/18 PHP
ThinkPHP查询中的魔术方法简述
2014/06/25 PHP
详解php魔术方法(Magic methods)的使用方法
2016/02/14 PHP
YII框架行为behaviors用法示例
2019/04/26 PHP
js中top/parent/frame概述及案例应用
2013/02/06 Javascript
javascript中数组的sort()方法的使用介绍
2013/12/18 Javascript
用JS实现轮播图效果(二)
2016/06/26 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
easyui combobox开启搜索自动完成功能的实例代码
2016/11/08 Javascript
jQuery Validate插件自定义验证规则的方法
2016/12/27 Javascript
详解vue2路由vue-router配置(懒加载)
2017/04/08 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
2017/07/17 Javascript
使用jQuery实现购物车结算功能
2017/08/15 jQuery
JS实现点击链接切换显示隐藏内容的方法
2017/10/19 Javascript
bootstrap-Treeview实现级联勾选
2017/11/23 Javascript
浅谈webpack编译vue项目生成的代码探索
2017/12/11 Javascript
babel之配置文件.babelrc入门详解
2018/02/22 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
vue.js实现回到顶部动画效果
2019/07/31 Javascript
element-ui封装一个Table模板组件的示例
2021/01/04 Javascript
[02:38]2018DOTA2亚洲邀请赛赛前采访-VGJ.T
2018/04/03 DOTA
[47:38]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
使用Python开发windows GUI程序入门实例
2014/10/23 Python
Python中的数学运算操作符使用进阶
2016/06/20 Python
Python实现将照片变成卡通图片的方法【基于opencv】
2018/01/17 Python
Numpy一维线性插值函数的用法
2020/04/22 Python
AssertionError 跟一下那个类是 “is – a”的关系
2012/02/21 面试题
大学生的网上创业计划书
2013/12/31 职场文书
促销活动策划方案
2014/01/12 职场文书
大学生个人自荐信
2014/02/24 职场文书
六一文艺汇演开幕词
2015/01/29 职场文书
学生乘坐校车安全责任书
2015/05/11 职场文书
幼儿园班级工作总结2015
2015/05/25 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
nginx内存池源码解析
2021/11/20 Servers