# 转换器
转换器插件(即返回 transform 函数以进行例如转换非 JS 文件的转换器)应支持 options.include 和 options.exclude,两者都可以是 minimatch 模式或 minimatch 模式数组。如果省略 options.include 或其长度为零,则默认情况下应包括文件;否则,只有 ID 与其中一个模式匹配时才应包括它们。
如果 transform 钩子返回一个对象,则还可以包括一个 ast 属性。只有在你知道自己在做什么时才使用此功能。请注意,仅使用转换链中的最后一个 AST(如果有转换,则由 load 钩子生成的任何 AST 都将被丢弃以进行转换模块)。
# 转换器示例
(使用 @rollup/pluginutils 获取常用函数,并按推荐方式实现转换器。)
import { createFilter } from '@rollup/pluginutils';
function transformCodePlugin(options = {}) {
const filter = createFilter(options.include, options.exclude);
return {
name: 'transform-code',
transform(code, id) {
if (!filter(id)) return;
// 进行转换。。。
return {
code: generatedCode,
map: generatedSourceMap
};
}
};
}
# 源代码转换
如果插件转换源代码,则应自动生成 sourcemap,除非有特定的 sourceMap: false 选项。Rollup 仅关心 mappings 属性(其他所有内容都会自动处理)。magic-string 提供了一种简单的方法来为添加或删除代码片段等基本转换生成这样的映射。
如果没有生成 sourcemap 的意义(例如 rollup-plugin-string),则返回一个空的 sourcemap:
return {
code: transformedCode,
map: { mappings: '' }
};
如果你不想转换代码,则可以通过返回 null 来保留现有的 sourcemap:
return {
code: transformedCode,
map: null
};
如果你创建了一个你认为对他人有用的插件,请将其发布到 NPM 并将其提交到 github.com/rollup/awesome!