使用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+DIV实现鼠标划过切换层效果的实例代码
Nov 26 Javascript
js根据日期判断星座的示例代码
Jan 23 Javascript
JavaScript中的prototype和constructor简明总结
Apr 05 Javascript
JS 实现列表与多选框选择附预览动画
Oct 29 Javascript
js实现文字在按钮上滚动的方法
Aug 20 Javascript
JS实现alert中显示换行的方法
Dec 17 Javascript
JavaScript开发者必备的10个Sublime Text插件
Feb 27 Javascript
jquery删除数组中重复元素
Dec 05 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
Feb 13 Javascript
JavaScript编写一个贪吃蛇游戏
Mar 09 Javascript
Vue2仿淘宝实现省市区三级联动
Apr 15 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
Dec 04 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/09/07 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
2012/09/05 PHP
PHP实现的带超时功能get_headers函数
2015/02/10 PHP
PHP中的use关键字及文件的加载详解
2016/11/28 PHP
PHP异常类及异常处理操作实例详解
2018/12/19 PHP
Javascript优化技巧之短路表达式详细介绍
2015/03/27 Javascript
Node.js环境下JavaScript实现单链表与双链表结构
2016/06/12 Javascript
JS控制HTML元素的显示和隐藏的两种方法
2016/09/27 Javascript
jQuery实现立体式数字滚动条增加效果
2016/12/21 Javascript
利用BootStrap的Carousel.js实现轮播图动画效果
2016/12/21 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
docker中编译nodejs并使用nginx启动
2017/06/23 NodeJs
使用JS获取SessionStorage的值
2018/01/12 Javascript
angularJS的radio实现单项二选一的使用方法
2018/02/28 Javascript
轻量级JS Cookie插件js-cookie的使用方法
2018/03/22 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
2018/12/06 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
vue实现把接口单独存放在一个文件方式
2020/08/13 Javascript
用Python的Flask框架结合MySQL写一个内存监控程序
2015/11/07 Python
python用户管理系统
2018/03/13 Python
Python 使用PIL中的resize进行缩放的实例讲解
2018/08/03 Python
详解Python函数式编程—高阶函数
2019/03/29 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
Python自动登录QQ的实现示例
2020/08/28 Python
2020版Python学习路线图(附学习资料)
2020/09/15 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
2021/01/27 Python
利用 CSS3 实现的无缝轮播功能代码
2017/09/25 HTML / CSS
HTML5文档结构标签
2017/04/21 HTML / CSS
Dr. Martens马汀博士澳大利亚官网:马丁靴鼻祖
2019/07/02 全球购物
linux面试相关问题
2012/08/11 面试题
酒店管理自荐信
2013/10/23 职场文书
酒店总经理职务说明书
2014/02/26 职场文书
2014国庆节餐厅促销活动策划方案
2014/09/16 职场文书
大学生年度个人总结
2015/02/15 职场文书
SpringBoot系列之MongoDB Aggregations用法详解
2022/02/12 MongoDB
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python