rollup打包vue组件并发布到npm的方法

作者:UzumakiHan 时间:2024-05-22 10:43:32 

个人认为rollup在打包组件的实现方式比用webpack方便,webpack应该是比较适合打包大型的工程项目,而rollup适合打包一些平时在项目中的组件

rollup中文文档:简介 | rollup.js 中文文档 | rollup.js中文网 (rollupjs.com)

这次打包一个滚动加载更多的组件,因为平时用vant是vant-list 会遇到一些问题,例如滚动到底部没有触发加载更多逻辑。

首先在项目根目录安装rollup

npm i rollup -D

安装一些rollup常用到的plugins

基本的工程化插件

  • @rollup/plugin-node-resolve 帮助 rollup 识别外部模块

  • @rollup/plugin-babel   babel插件 将es6+转为es5

  • rollup-plugin-copy  直接复制静态文件

  • @rollup/plugin-terser 压缩代码

  • @rollup/plugin-commonjs 将commonjs模块转为es模块

  • @rollup/plugin-typescript  typescript插件

  • @rollup/plugin-alias 路径别名

npm i @rollup/plugin-babel @rollup/plugin-commonjs @rollup/plugin-node-resolve @rollup/plugin-terser rollup-plugin-vue @rollup/plugin-typescript @babel/core - D

处理Vue文件

rollup-plugin-vue 

用于处理.vue文件。vue2和vue3项目所用的rollup-plugin-vue版本不一样,vue的编译器也不一样。

  • vue2:rollup-plugin-vue^5.1.9 + vue-template-compiler

  • vue3:rollup-plugin-vue^6.0.0 + @vue/compiler-sfc

npm i vue-template-compiler @vue/compiler-sfc -D

vue2和vue3版本的plugins可以这样在devDependencies中指定,,然后npm install

"devDependencies":{
   "rollup-plugin-vue2": "npm:rollup-plugin-vue@^5.1.9",
   "rollup-plugin-vue3": "npm:rollup-plugin-vue@^6.0.0",
}

打包CSS插件

rollup-plugin-postcss 识别css和预处理文件 (如果css,rollup-plugin-postcss需要配合sass使用)

这里我以分别vue2和vue3各创建一个rollup.config.js

vue2-----rollup.vue2.config.js,配置如下

import resolve from '@rollup/plugin-node-resolve';
import vue2 from 'rollup-plugin-vue2';
import babel from '@rollup/plugin-babel';
import commonjs from '@rollup/plugin-commonjs';
import terser from '@rollup/plugin-terser';
import json from '@rollup/plugin-json';
import postcss from 'rollup-plugin-postcss'
import typescript from "@rollup/plugin-typescript";
export default {
   input: 'src/index.ts',
   output: {
       globals: {
           vue: "Vue"
       }
   },
   plugins: [
       resolve(),
       typescript(),
       terser(),
       json(),
       vue2({
           css: true,
           compilerTemplate: true,
           preprocessStyles: true
       }),
       babel({
           exclude: "**/node_modules/**"
       }),
       commonjs(),
       postcss()
   ]
}

vue3-----rollup.vue3.config.js,配置如下

import resolve from '@rollup/plugin-node-resolve';
import vue3 from 'rollup-plugin-vue3';
import babel from '@rollup/plugin-babel';
import commonjs from '@rollup/plugin-commonjs';
import terser from '@rollup/plugin-terser';
import json from '@rollup/plugin-json';
import postcss from 'rollup-plugin-postcss'
import typescript from '@rollup/plugin-typescript';
export default {
   input: 'src/index.ts',
   output: {
       globals: {
           vue: "Vue"
       }
   },
   plugins: [
       resolve(),
       typescript(),
       terser(),
       json(),
       vue3({
           css: true,
           compilerTemplate: true,
           preprocessStyles: true
       }),
       babel({
           exclude: "**/node_modules/**"
       }),
       commonjs(),
       postcss()
   ]
}

配置打包命令,这里我把cjs、umd、es、iife都分别打包出来了

"scripts": {
   "build": "npm run build:vue3 && npm run build:vue2",
   "build:vue2": "rimraf dist/vue2/* && npm run build:umdvue2 && npm run build:esvue2 && npm run build:unpkgvue2 && npm run build:cjsvue2",
   "build:umdvue2": "rollup -c rollup.vue2.config.js --format umd --name mList --file dist/vue2/index.umd.js",
   "build:esvue2": "rollup -c rollup.vue2.config.js --format es --file dist/vue2/index.esm.js",
   "build:unpkgvue2": "rollup -c rollup.vue2.config.js --format iife --file dist/vue2/index.min.js",
   "build:cjsvue2": "rollup -c rollup.vue2.config.js --format cjs --file dist/vue2/index.cjs.js",
   "build:vue3": "rimraf dist/vue3/* && npm run build:umdvue3 && npm run build:esvue3 && npm run build:unpkgvue3 && npm run build:cjsvue3",
   "build:umdvue3": "rollup -c rollup.vue3.config.js --format umd --name mList --file dist/vue3/index.umd.js",
   "build:esvue3": "rollup -c rollup.vue3.config.js --format es --file dist/vue3/index.esm.js",
   "build:unpkgvue3": "rollup -c rollup.vue3.config.js --format iife --file dist/vue3/index.min.js",
   "build:cjsvue3": "rollup -c rollup.vue3.config.js --format cjs --file dist/vue3/index.cjs.js"
 },

 打包后的文件

rollup打包vue组件并发布到npm的方法

 然后可以发布到npm

npm地址:hfex-list - npm (npmjs.com)

github地址:UzumakiHan/hfex-list: 下拉加载更多组件 (github.com)

来源:https://blog.csdn.net/Hhjian524/article/details/130816796

标签:rollup,vue,组件,npm
0
投稿

猜你喜欢

  • Python3导入自定义模块的三种方法详解

    2021-06-05 18:49:27
  • Python 浪漫烟花实现代码全解

    2023-11-16 01:24:56
  • Go中JSON解析时tag的使用

    2024-05-09 09:31:52
  • pytorch 多个反向传播操作

    2021-03-05 02:21:49
  • python+openCV利用摄像头实现人员活动检测

    2021-06-23 10:39:36
  • Pandas 筛选和删除目标值所在的行的实现

    2021-11-16 03:11:31
  • MySQL source导入很慢的解决方法

    2024-01-25 18:25:49
  • Vue 2.0入门基础知识之内部指令详解

    2024-05-10 14:17:19
  • python标准库random模块处理随机数

    2023-11-23 16:22:49
  • python中的zip模块

    2023-09-13 07:49:56
  • 实例剖析:MySQL数据库优化详解

    2008-11-22 12:19:00
  • Python ChineseCalendar包主要类和方法详解

    2021-10-12 10:40:40
  • 对numpy中轴与维度的理解

    2022-03-20 11:58:33
  • MySQL版本低了不支持两个时间戳类型的值解决方法

    2024-01-18 14:13:21
  • 使用Python进行QQ批量登录的实例代码

    2021-07-14 16:58:04
  • Python编程中的异常处理教程

    2022-10-16 04:26:23
  • js怎么覆盖原有方法实现重写

    2024-05-09 10:39:22
  • String 的扩展方法

    2008-05-12 22:36:00
  • BootstrapValidator实现注册校验和登录错误提示效果

    2024-04-08 10:57:03
  • jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解

    2024-04-16 08:54:20
  • asp之家 网络编程 m.aspxhome.com