当前位置: 首页 > news >正文

Rollup插件注入指南

@rollup/plugin-inject 插件概述

@rollup/plugin-inject 是 Rollup 官方提供的插件,用于在打包过程中向模块中注入变量或模块。适用于需要全局注入依赖(如process.env或第三方库)的场景,避免手动在每个文件中引入。


核心功能

  • 自动注入变量:将指定的变量或模块注入到每个文件的顶部,无需手动导入。
  • 灵活配置:支持通过正则匹配或自定义函数选择注入目标。
  • 兼容性处理:确保注入的变量符合模块规范(如 ESM 或 CJS)。

安装方法

通过 npm 或 yarn 安装插件:

npm install @rollup/plugin-inject --save-dev # 或 yarn add @rollup/plugin-inject --dev

基本配置

在 Rollup 配置文件中引入插件并配置注入规则:

import inject from '@rollup/plugin-inject'; export default { input: 'src/index.js', output: { file: 'dist/bundle.js', format: 'esm' }, plugins: [ inject({ // 注入配置 Promise: ['es6-promise', 'Promise'], // 将 `es6-promise` 的 Promise 注入为全局变量 process: 'process' // 注入 `process` 变量(需安装 `process` 包) }) ] };

配置选项详解

1. 键值对形式

通过对象键值对指定注入内容,键为全局变量名,值为模块路径或数组:

  • 单字符串{ variable: 'module-path' }
    直接注入module-path的默认导出。
  • 数组形式{ variable: ['module-path', 'named-export'] }
    注入module-path的具名导出。
2. 自定义解析

通过includeexclude控制注入范围:

inject({ Buffer: ['buffer', 'Buffer'], include: ['**/*.js'], // 仅对 JS 文件生效 exclude: ['node_modules/**'] // 排除 node_modules })
3. 动态注入

使用函数动态返回注入内容:

inject({ __buildEnv__: () => JSON.stringify(process.env.NODE_ENV) })

常见用例

注入全局变量
inject({ $: 'jquery', // 注入 jQuery 为全局 `$` _: 'lodash' // 注入 Lodash 为全局 `_` })
处理 Node.js 环境变量
inject({ process: 'process', // 注入 `process`(需安装 `process` 包) Buffer: ['buffer', 'Buffer'] // 注入 Buffer })
条件式注入
inject({ React: process.env.NODE_ENV === 'production' ? 'react/cjs/react.production.min.js' : 'react/cjs/react.development.js' })

注意事项

  1. 模块安装:确保注入的模块已安装为项目依赖(如processbuffer)。
  2. 命名冲突:避免与已有变量名冲突,可通过别名解决。
  3. 格式兼容:在非 ESM 格式(如 IIFE)中,需确保注入的变量符合全局作用域要求。

完整配置示例

import inject from '@rollup/plugin-inject'; export default { input: 'src/main.js', output: { format: 'esm', dir: 'dist' }, plugins: [ inject({ React: 'react', PropTypes: 'prop-types', exclude: ['**/test/*.js'], include: ['**/*.jsx?'] }) ] };
http://www.jsqmd.com/news/850810/

相关文章:

  • 使用 Taotoken 聚合平台后我的 API 调用延迟与稳定性体感观察
  • Xcode 14 Archives打包上传TestFlight保姆级避坑指南(含ipa导出)
  • 别再为CV毕设选题发愁了!学长手把手教你用YOLOv8搞定一个能跑起来的项目(附完整代码)
  • 从硬件物理测距到时空AI拓扑:全域空间感知代差技术体系综述
  • RTX51 Tiny中断冲突与寄存器组配置解决方案
  • 2026苏州闲置手表变现攻略:五大回收平台真实行情大测评 - 奢侈品回收测评
  • 别再硬算轨道了!手把手教你用STK的Target Sequence模块,30分钟搞定卫星过顶目标点
  • 告别‘一刀切’图像增强:拆解IA-YOLO如何用一个小型CNN动态调参,让YOLO在雾天黑夜都看得清
  • TrollInstallerX:iOS 14-16.6.1设备一键安装TrollStore的终极解决方案
  • 每天节省25分钟!淘宝淘金币全自动任务脚本终极指南
  • 局部点状离散定位与全域连续空间感知技术解析UWB:局部点状离散定位|镜像:全域连续空间感知
  • 不到千元玩转空间AI?OpenCV OAK-D-Lite上手体验与避坑指南
  • 2026广州专利代办机构排名推荐:众致知识产权9年深耕登顶,五强榜单助力企业合规布局 - 速递信息
  • N_m3u8DL-RE:现代流媒体下载架构深度解析与技术实践
  • 2026佛山市本地人必选的瓷砖空鼓专业维修公司TOP5推荐!卫生间空鼓翘边,厨房空鼓翘边,客厅空鼓翘边,全天响应,免费上门,5月专业瓷砖空鼓修复公司持证上岗师傅排名最新深度调研方案) - 一修哥修缮
  • Sunshine游戏串流:打造你的专属云端游戏服务器
  • 测试自动化标准化理念
  • 2026年乌鲁木齐全屋定制工厂哪家好?苏大师本地源头工厂避坑完全指南 - 优质企业观察收录
  • 告别CentOS后,我为什么选择华为openEuler 23.03作为我的主力Linux服务器?
  • 告别Transformer卡顿?用Mamba在3D医学影像分割上实现又快又准(附SegMamba实战代码)
  • 别再手动填密钥了!STM32G0 RSA签名验签的自动化脚本与避坑指南
  • 保姆级教程:用C++和Detours库拦截Windows关机,实现你的“防误触”小工具
  • ThinkPad双风扇终极控制:TPFanControl2完全使用指南
  • 武汉新鹏源环保工程:硚口有实力的油烟管道安装公司 - LYL仔仔
  • 从CPU视角看Cache:深入理解Offset、Index、Tag如何协同工作提升程序性能
  • 分期乐购物额度变现最全指南,详细教程一看就会! - 团团收购物卡回收
  • 哈工大NLP期末考后复盘:从HMM到Transformer,这些知识点你掌握了吗?
  • 2026保山市本地人必选的瓷砖空鼓专业维修公司TOP5推荐!卫生间空鼓翘边,厨房空鼓翘边,客厅空鼓翘边,全天响应,免费上门,5月专业瓷砖空鼓修复公司持证上岗师傅排名最新深度调研方案) - 一修哥修缮
  • BBDown终极指南:高效下载B站视频的专业工具
  • 从‘失效’到‘复活’:深入剖析空间平滑MUSIC算法在雷达/声呐DOA估计中的实战应用