rollup打包vue组件

news2024/12/24 21:30:42

rollup安装与使用

npm i rollup -g        # 全局安装
npm i rollup -D        # 项目本地安装

rollup配置

import vue from 'rollup-plugin-vue'
import typescript from 'rollup-plugin-typescript2'
import postcss from 'rollup-plugin-postcss';
import cssnano from 'cssnano'
import { nodeResolve } from '@rollup/plugin-node-resolve'
import autoprefixer from 'autoprefixer'
import { terser } from 'rollup-plugin-terser'
import babel from 'rollup-plugin-babel'
import commonjs from 'rollup-plugin-commonjs'

const overrides = {
  compilerOptions: { declaration: true }, // 生成.d.ts的文件
  exclude: ['tests/**/*.ts', 'tests/**/*.tsx']
}

export default {
  input: 'src/lib/index.ts',
  output: [
    {
      file: './dist/hut-umd.js',
      format: 'umd',
      name: 'hut'
    },
    {
      file: './dist/hut-es.js',
      format: 'es'
    },
    {
      file: './dist/hut-cjs.js',
      format: 'cjs'
    }
  ],
  plugins: [
    vue({
      style: {
        postcssPlugins: [
          autoprefixer(),
          cssnano()
        ]
      }
    }),
    babel({
      exclude: 'node_modules/**'
    }),
    nodeResolve(),
    typescript({ tsconfigOverride: overrides,check:false }),
    postcss({
      plugins: [
        autoprefixer(),
        cssnano()
      ]
    }),
    commonjs(),
    terser()
  ],
  external: ['vue', 'dayjs']
}

命令

使用Rollup的配置文件,可以使用rollup --config或者rollup -c指令。

//修改package.json的script字段

"dev": "rollup -c"                 // 默认使用rollup.config.js
"dev": "rollup -c my.config.js"    //使用自定义的配置文件,my.config.js

插件分析

1.rollup-plugin-babel
rollup-plugin-babel用于转换es6语法。

安装

npm i rollup-plugin-babel @babel/core @babel/preset-env --D

配置
在项目根目录创建.babelrc文件。

{
  "presets": [
      [
        "@babel/preset-env"
      ]
    ]
}

2.rollup-plugin-commonjs
rollup默认是不支持CommonJS模块的,自己写的时候可以尽量避免使用CommonJS模块的语法,但有些外部库的是cjs或者umd(由webpack打包的),所以使用这些外部库就需要支持CommonJS模块。

3.rollup-plugin-postcss autoprefixer

  • 处理css需要用到的插件是rollup-plugin-postcss。它支持css文件的加载、css加前缀、css压缩、对scss/less的支持等等。
    首先,安装,npm i rollup-plugin-postcss --D,然后在rollup.config.js中配置:

  • 借助autoprefixer插件来给css3的一些属性加前缀。安装npm i autoprefixer
    package.json 添加"browserslist"字段

"browserslist": [
  "defaults",
  "not ie < 8",
  "last 2 versions",
  "> 1%",
  "iOS 7",
  "last 3 iOS versions"
]
  • css压缩
    cssnano对打包后的css进行压缩。使用方式也很简单,和autoprefixer一样,安装cssnano,然后配置

  • 抽离单独的css文件
    rollup-plugin-postcss可配置是否将css单独分离,默认没有extract,css样式生成style标签内联到head中,配置了extract,就会将css抽离成单独的文件。当然,在页面也需要单独引入打包好的css文件。

postcss({
  plugins: [
    autoprefixer(),
    cssnano()
  ],
  extract: 'css/index.css'  
})
  • 支持scss/less
    实际项目中我们不太可能直接写css,而是用scss或less等预编译器。rollup-plugin-postcss默认集成了对scss、less、stylus的支持,在我们项目中,只要配置了rollup-plugin-postcss,就可以直接使用这些css预编译器,很方便的。

3.rollup-plugin-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
  • rollup-plugin-vue也是默认支持scss、less、stylus,可以在项目中直接使用。给.vue文件中的css自动加前缀,需要在rollup-plugin-vue中配置。
import vue from 'rollup-plugin-vue'
import autoprefixer from 'autoprefixer'  //同样要配置browserslist
import cssnano from 'cssnano'
export default {
  ...
  plugins:[
    vue({
      style: {
        postcssPlugins: [
          autoprefixer(),
          cssnano()
        ]
      }
    })
  ]
}

4.rollup-plugin-terser

在生产环境中,代码压缩是必不可少的。我们使用rollup-plugin-terser进行代码压缩。

import { terser } from 'rollup-plugin-terser'
export default {
  ...
  plugins:[
    terser()
  ]
}

5.rollup-plugin-serve、rollup-plugin-livereload

这两个插件常常一起使用,rollup-plugin-serve用于启动一个服务器,rollup-plugin-livereload用于文件变化时,实时刷新页面。

import serve from 'rollup-plugin-serve'
import livereload from 'rollup-plugin-livereload'
export default {
  ...
  plugins:[
    serve({
      contentBase: '',  //服务器启动的文件夹,默认是项目根目录,需要在该文件下创建index.html
      port: 8020   //端口号,默认10001
    }),    
    livereload('dist')   //watch dist目录,当目录中的文件发生变化时,刷新页面
  ]
}

然而,此时修改src中的文件,页面并不会实时刷新,因为dist目录下的文件并没有更新。 rollup监听源文件的改动很简单,就是在执行打包命令时,添加 -w 或者 --watch

//package.json
"scripts": {
   "dev": "rollup -wc"
},

6.rollup-plugin-typescript2
如果使用了ts需要这个插件解析

import typescript from 'rollup-plugin-typescript2'

const overrides = {
  compilerOptions: { declaration: true }, // 生成.d.ts的文件
  exclude: ['tests/**/*.ts', 'tests/**/*.tsx']
}
export default {
  ...
  plugins:[
    terser()typescript({ tsconfigOverride: overrides, check: false }),
    // 如果打包有ts报错就添加check: false
  ]
}

打包后,修改package.json:
这一步很重要,如果没有提供正确的路径,其他人导包引入时将无法正常引入

"main": "dist/my-lib-cjs.js",
"module": "dist/my-lib-es.js",

在这里插入图片描述
在这里插入图片描述

package.json的main和module,types,unpkg这些字段的路径是根据打包后的文件的路径来写的 并!!!!!!!!!!!

最后

然后npm发布
做完这些你就可以使用

pnpm add 你的包名
import {xxx} from '你的包名'   

!!!!!!!!!!!//注意npm发布的时候一定要注意main和module字段的指定路径是否正确,不然这么引入将报错

相关文章

相关文章

相关文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/84601.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022华为全球校园AI算法精英赛:季军方案!

Datawhale干货 作者&#xff1a;鲤鱼&#xff0c;西安交通大学&#xff0c;人工智能学院笔者鲤鱼&#xff0c;是西安交通大学人工智能学院的一名研究生&#xff0c;在2022华为全球校园AI算法精英赛的赛道二取得了季军的成绩。初赛阶段一直名列A榜的榜首&#xff0c;复赛前几天也…

zabbix6.0安装教程(二):Zabbix6.0安装最佳实践

zabbix6.0安装教程&#xff08;二&#xff09;&#xff1a;Zabbix6.0安装最佳实践 目录概述一、Access control1.Zabbix agent 的安全用户2.UTF-8 编码二、Zabbix Security Advisories and CVE database1.为 Zabbix 前端设置 SSL三、Web server hardening1.在 URL 的根目录上启…

[附源码]Python计算机毕业设计SSM基于的开放式实验室预约系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

人家这才叫软件测试工程师,你那只是混口饭吃

前些天和大学室友小聚了一下&#xff0c;喝酒喝大发了&#xff0c;谈天谈地谈人生理想&#xff0c;也谈到了我们各自的发展&#xff0c;感触颇多。曾经找工作我迷茫过、徘徊不&#xff0c;毕业那会我屡屡面试失败&#xff0c;处处碰壁&#xff1b;工作两年后我一度想要升职加薪…

[附源码]Python计算机毕业设计SSM基于的二手车商城(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

第五款!美创数据水印溯源系统通过中国信通院数据安全能力评测

近期&#xff0c;中国信息通信研究院安全研究所发布“数据安全产品能力验证计划”第六期通过企业名单。美创科技数据水印溯源系统顺利通过测试&#xff0c;成为美创第五款通过权威检验测评的数据安全产品&#xff01; 此前&#xff0c;中国信息通信研究院安全所开展数据安全类产…

分布式系统中的数据复制

什么是数据复制 数据复制是制作数据的多个副本并将其存储在不同位置的过程&#xff0c;用于备份目的、容错和提高它们在网络中的整体可访问性。与数据镜像类似&#xff0c;数据复制可以应用于单个计算机和服务器。复制的数据可以存储在同一系统、现场和非现场主机以及基于云的…

FT 在图形渲染中的应用:基于 FFT 的海浪模拟

接上文&#xff1a;FT 在图像处理中的应用 五、一个大型案例&#xff1a;基于 FFT 的海浪模拟 前置&#xff1a;​​​​​ 傅里叶级数与傅里叶变换离散傅里叶变换(DFT)​​​​​​​​FT 在图像处理中的应用​5.1 FFT 海洋公式&#xff1a;二维 IDFT https://tore.tuhh.de…

Abz-G-F(4NO2)-P-OH, 67482-93-3

Fluorogenic (FRET) substrate for angiotensin I-converting enzyme (ACE). Enzymatic cleavage of Abz-Gly-Nph-Pro yields Abz-Gly-OH emitting at 420 nm. 血管紧张素I转换酶&#xff08;ACE&#xff0c;ACE2&#xff09;底物 血管紧张素i转换酶(ACE)的荧光底物。Abz-Gly-N…

docker 报错 No space left on device

问题&#xff1a; 在 Linux 环境上使用 docker 命令 <docker pull 镜像> 拉取镜像的时遇到了 No space left on device 的问题。 排查过程&#xff1a; 初步分析可能是存储镜像的路径磁盘满了。 但是使用 df -h 命令之后&#xff0c;发现磁盘还有空间。于是猜测应该是…

【Linux】Linux软件包管理器yum

希望你今天有一个好心情 文章目录一、(客户端&&服务器) (软件包&&软件包管理器yum) (利益链&&逻辑链)1.客户端&&服务器2.软件包&&软件包管理器3.一条利益链一条逻辑链二、Linux下包管理器yum的使用(root身份或sudo提权进行搜索list…

【安全】免密登陆SQLSERVER 之 Token 窃取

先"灌肠" 往往在高版本系统 或者 在强密码的等等 特殊情况下我们无法获得 明文密码。那么我们该如何在没有明文密码及有windows哈希的情况下登陆 SQLSERVER呢(当然我并没有sa等任何账号); 默认安装点击登陆名 发现有好几个可以登陆的用户在users 组里都可以登陆 (基本…

WLAN二层旁挂组网与三层旁挂组网

第一部分&#xff1a;关于底层逻辑问题 1、WLAN二层组网与三层组网到底是指哪里是二层哪里是三层&#xff0c;两者有什么区别&#xff1f; WLAN的二层组网与三层组网指的是AP与AC之间建立的Capwap隧道是二层的还是三层的&#xff0c;以此来区分是二层组网还是三层组网。注意&…

使用微信部署ChatGPT

使用微信部署ChatGPT 一、介绍 最近ChatGPT爆火&#xff0c;网上出现了很多ChatGPT项目&#xff0c;有部署到微信的&#xff0c;有部署到QQ机器人的&#xff0c;今天介绍一种部署到微信的方法。 此项目参考github上https://github.com/869413421/wechatbot项目&#xff0c;需…

Ajax简介与基本使用

前言 本文为Ajax简介与基本使用相关知识&#xff0c;首先将对Ajax进行简介&#xff08;包含&#xff1a;什么是Ajax、Ajax的作用、Ajax的好处&#xff09;&#xff0c;然后介绍JS方式Ajax的实现&#xff08;包含发送 Ajax 请求的五个步骤、创建 XMLHttpRequest 对象、向服务器发…

通用的融合框架:IFCNN

IFCNN: A general image fusion framework based on convolutional neural network &#xff08;IFCNN: 基于卷积神经网络的通用图像融合框架&#xff09; 在本文中&#xff0c;我们提出了一种基于卷积神经网络的通用图像融合框架&#xff0c;称为IFCNN。**受变换域图像融合算…

测试人生 | 折腾 6 年踩坑无数的”笨小孩“:方向对了,路就不会遥远!

image1080459 72.4 KB 编者按&#xff1a;本文来自霍格沃兹测试学院学员 笨小孩 的分享&#xff0c;从退伍军人到测试小白&#xff0c;从培训被坑再到经历各种小公司倒闭、裁员、6年间几番折腾&#xff0c;最终靠“笨功夫”成功转型测试开发&#xff0c;年薪近 30W&#xff0c…

番外8:ADS导出DWG文件并交给工厂制板

番外8&#xff1a;ADS导出DWG文件并交给工厂制板 &#xff08;功率放大器板子和散热器&#xff09; 将ADS源文件导出PCB与散热器文件&#xff08;功率放大器&#xff09; 导出文件并预处理 打开制作好的版图文件&#xff0c;在原有基础上打好散热孔和固定孔&#xff0c;散热…

Deep Learning Architecture for Automatic Essay Scoring

1. Introduction 利用手工制作的特征&#xff0c;如文章长度、句子长度、语法正确性或可读性来评分的文章面临以下问题。首先&#xff0c;它可能被学生用作欺骗系统的一种选择&#xff0c;即写出并提交一篇结构良好但偏离主题**的文章。由于文字结构和表面等语言特征&#xff…

[附源码]Python计算机毕业设计电影网站系统设计Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…