配置选项
核心功能
external
类型: |
(string | RegExp)[]| RegExp| string| (id: string, parentId: string, isResolved: boolean) => boolean
|
---|---|
CLI: |
-e
/
--external <external-id,another-external-id,...>
|
该选项用于匹配需要排除在 bundle 外部的模块,它的值可以是一个接收模块
id
参数并返回
true
(表示外部依赖)或
false
(表示非外部依赖)的函数,也可以是一个模块 ID 数组或者正则表达式。除此之外,它还可以只是单个的模块 ID 或正则表达式。被匹配的模块 ID 应该满足以下条件之一:
-
外部依赖的名称,需要和引入语句中写法完全一致。例如,如果想标记
import "dependency.js"
为外部依赖,就需要使用"dependency.js"
作为模块 ID;而如果要标记import "dependency"
为外部依赖,则使用"dependency"
。 - 解析过的模块 ID(如文件的绝对路径)。
请注意,如果要通过
/node_modules/
正则表达式过滤掉包的引入,例如
import {rollup} from 'rollup'
,需要先使用类似
@rollup/plugin-node-resolve
的插件,来将引入依赖解析到
node_modules
。
当用作命令行参数时,该选项的值应该是一个以逗号分隔的模块 ID 列表:
当该选项的值为函数时,它提供了三个参数
(id, parent, isResolved)
,可以为你提供更细粒度的控制:
-
id
为相关模块 id
-
parent
为进行引入的模块 id
-
isResolved
表示
id
是否已被插件等解析
当创建
iife
或
umd
格式的 bundle 时,你需要通过
output.globals
选项提供全局变量名,以替换掉外部引入。
如果一个相对引入,即以
./
或
../
开头,被标记为
external
,rollup 将在内部将该模块 ID 解析为绝对路径,以便引入的不同外部模块可以合并。当写入生成的 bundle 后,这些引入模块将再次被转换为相对引入。例如:
如果存在多个入口,rollup 会转换回相对引入的方式,就像
output.file
或
output.dir
与入口文件或所有入口文件位于相同目录。
input
类型:
string | string []| { [entryName: string]: string }
CLI:
-i
/
--input <filename>
该选项用于指定 bundle 的入口文件(例如,你的
main.js
,
app.js
或
index.js
文件)。如果值为一个入口文件的数组或一个将名称映射到入口文件的对象,那么它们将被打包到单独的输出 chunks。除非使用
output.file
选项,否则生成的 chunk 名称将遵循
output.entryFileNames
选项设置。当该选项的值为对象形式时,对象的属性名将作为文件名中的
[name]
,而对于值为数组形式,数组的值将作为入口文件名。
请注意,当选项的值使用对象形式时,可以通过在名称中添加
/
来将入口文件放入不同的子文件夹。以下例子将根据
entry-a.js
和
entry-b/index.js
,产生至少两个入口 chunks,即
index.js
文件将输出在
entry-b
文件夹中:
如果你想将一组文件转换为另一种格式,并同时保持文件结构和导出签名,推荐的方法是将每个文件变成一个入口文件,而不是使用
output.preserveModules
,后者可能会导出被除屑优化,并产生由插件创建的虚拟文件。你可以动态地处理,例如通过
glob
包。
如果某些插件在
buildStart
钩子结束前至少生成了一个 chunk(使用
this.emitFile
),则该选项可以省略。
当使用命令行时,多个入口只需要多次使用该选项输入。当作为第一个选项提供时,相当于不以
--input
为前缀:
可以使用
=
赋值来命名 chunk:
可以使用引号指定包含空格的文件名:
output.dir
类型:
string
CLI:
-d
/
--dir <dirname>
该选项用于指定所有生成的 chunk 被放置在哪个目录中。如果生成一个以上的 chunk,那么这个选项是必需的。否则,可以使用
file
选项来代替。
output.file
类型:
string
CLI:
-o
/
--file <filename>
该选项用于指定要写入的文件。如果适用的话,也可以用于生成 sourcemap。只有在生成的 chunk 不超过一个的情况下才可以使用。
output.format
类型:
string
CLI:
-f
/
--format <formatspecifier>
默认:
"es"
该选项用于指定生成的 bundle 的格式。满足以下其中之一:
-
amd
– 异步模块加载,适用于 RequireJS 等模块加载器
-
cjs
– CommonJS,适用于 Node 环境和其他打包工具(别名:
commonjs
)
-
es
– 将 bundle 保留为 ES 模块文件,适用于其他打包工具,以及支持
<script type=module>
标签的浏览器。(别名:
esm
,
module
)
-
iife
– 自执行函数,适用于
<script>
标签(如果你想为你的应用程序创建 bundle,那么你可能会使用它)。
iife
表示“自执行
函数表达式
”
-
umd
– 通用模块定义规范,同时支持
amd
,
cjs
和
iife
-
system
– SystemJS 模块加载器的原生格式(别名:
systemjs
)
output.globals
类型:
{ [id: string]: string }| ((id: string) => string)
CLI:
-g
/
--globals <external-id:variableName,another-external-id:anotherVariableName,...>
该选项用于在
umd
/
iife
bundle 中,使用
id: variableName
键值对指定外部依赖。例如,在这样的情况下:
我们需要告诉 Rollup
jquery
是外部依赖,
jquery
模块的 ID 为全局变量
$
:
或者,可以提供一个函数,将外部模块的 ID 变成一个全局变量名。
当作为命令行参数时,该选项的值应该是以逗号分隔的
id:variableName
键值对列表:
要告诉 Rollup 用全局变量替换本地文件时,请使用一个绝对路径的 ID。
output.name
类型:
string
CLI:
-n
/
--name <variableName>
对于输出格式为
iife
/
umd
的 bundle 来说,若想要使用全局变量名来表示你的 bundle 时,该选项是必要的。同一页面上的其他脚本可以使用这个变量名来访问你的 bundle 输出。
该选项也支持命名空间,即可以包含点
.
的名字。最终生成的 bundle 将包含命名空间所需要的设置。
output.plugins
类型:
MaybeArray<MaybePromise<OutputPlugin | void>>
该选项用于指定输出插件。关于如何使用特定输出的插件,请查看
使用输出插件
,关于如何编写自己的插件,请查看
插件
。对于从包中引入的插件,记得要调用引入的插件函数(即调用
commonjs()
,而不仅仅是
commonjs
)。返回值为假的插件将被忽略,这样可以用来灵活启用或禁用插件。嵌套的插件将扁平化。异步插件将等待和被解决。
并非所有的插件都可以通过该选项使用。
output.plugins
仅限于在
bundle.generate()
或
bundle.write()
阶段,即在 Rollup 的主要分析完成后运行钩子的插件才可使用。如果你是一个插件作者,请查看
输出生成钩子
章节以了解哪些钩子可以使用。
以下是一个使用压缩插件作用于其中一个输出的例子:
plugins
类型:
MaybeArray<MaybePromise<Plugin | void>>
关于如何使用插件的更多信息,请查看
使用插件
章节,关于如何编写你自己的插件,请查看
插件
章节(试试看吧,它并不像听起来那么困难,你可以通过 Rollup 插件做很多拓展)。对于从包中引入的插件,记住要调用引入的插件函数(即调用
commonjs()
,而不仅仅是
commonjs
)。返回值为假的插件将被忽略,这样可以用来灵活启用或禁用插件。嵌套的插件将扁平化。异步插件将等待和被解决。
(上述例子还演示了如何使用一个异步 IIFE 和动态引入来避免引入不必要的模块,这可能会使打包过程变慢。)
进阶功能
cache
类型:
RollupCache | boolean
默认:
true
该选项用于指定之前 bundle 的
cache
属性。使用该设置,Rollup 将只会对改变的模块重新分析,从而加速观察模式中后续的构建。将此选项明确设置为
false
将阻止 bundle 生成
cache
属性,也将导致插件的缓存失效。
logLevel
类型:
LogLevel | "silent"
CLI:
--logLevel <level>
默认:
"info"
该选项决定哪些日志将被处理。查看
onLog
以了解可用的日志级别。默认的
logLevel
为
"info"
,这意味着 info 和 warning 日志将被处理,而 debug 日志将被忽略,这意味着它们既不会传递给插件
onLog
钩子,也不会传递给
onLog
选项或打印到控制台。
当使用命令行时,错误日志仍将打印到控制台,因为它们不会通过日志系统处理。查看
--silent
标志以了解如何抑制错误日志。
makeAbsoluteExternalsRelative
类型:
boolean| "ifRelativeSource"
CLI:
--makeAbsoluteExternalsRelative
/
--no-makeAbsoluteExternalsRelative
默认:
"ifRelativeSource"
该选项决定外部依赖的绝对路径是否应该在输出中转换为相对路径。本选项不仅适用于源文件中的绝对路径,也适用于由插件或 Rollup 核心解析出的绝对路径。
值为
true
时,像
import "/Users/Rollup/project/relative.js"
这样的外部引入将被转换为相对路径。当把绝对路径转换为相对路径时,Rollup
不考虑
file
或
dir
选项,因为这些选项可能不存在,比如在使用 JavaScript API 的构建中。相反,它假设输出 bundle 的根目录位于 bundle 中包含的所有模块的同一父目录。比如说所有模块的公共父目录是
"/Users/Rollup/project"
,上面的引入可能会在输出中被转换为
import "./relative.js"
。如果输出 chunk 本身是嵌套在一个子目录中,通过设置例如
chunkFileNames: "chunks/[name].js"
,那么引入将会转换为
"../relative.js"
。
如上所述,这也适用于最初的相对引入,如
import "./relative.js"
,在被
external
选项标记为外部依赖之前会被解析为绝对路径。
一个常见的问题是,这种机制也会适用于像
import "/absolute.js'"
这样的引入,导致输出中出现意外的相对路径。
对于这种情况,设置为
"ifRelativeSource"
可以检查原始引入是否是相对引入,然后在输出时才将其转换为相对引入。设置为
false
将在输出时保持所有路径为绝对路径。
请注意,当一个相对路径使用
external
选项直接标记为 "外部依赖" 时,那么它在输出时会是相同的相对路径。当它通过插件或 Rollup 核心解析,然后标记为外部依赖后,上述逻辑将适用。
maxParallelFileOps
类型:
number
CLI:
--maxParallelFileOps <number>
默认:
20
该选项限制 rollup 在读取模块或写入 chunk 时,同时能打开的文件数量。如果没有限制或者数值足够高,构建可能会失败,显示“EMFILE: Too many open files”(EMFILE:打开的文件数过多)。这取决于操作系统限制的句柄数(open file handles)大小。
onLog
Type:
(level: LogLevel, log: RollupLog, defaultHandler: LogOrStringHandler) => void;
一个用于截取日志信息的函数。如果未提供,日志将打印到控制台,其中 Rollup CLI 会聚合某些
"warn"
日志,并在构建完成后打印汇总的警告,以减少干扰。当使用
--silent
命令行选项时,也会触发此处理程序。
该函数接收三个参数:日志级别、日志对象和默认处理程序。日志对象至少有一个
code
和一个
message
属性,允许你控制如何处理不同类型的日志。其他属性根据日志类型添加。参见
utils/logs.ts
,查看内置错误和日志的完整列表,以及它们的代码和属性。
如果不调用默认处理程序,日志将不会打印到控制台。此外,您可以通过调用不同级别的默认处理程序来改变日志级别。使用附加级别
"error"
将把日志转换为一个抛出的错误,该错误具有附加的所有日志属性。
这个处理程序不会在日志被
logLevel
选项过滤掉时被调用。例如,默认情况下,
"debug"
日志将被忽略。
一些日志也有
loc
和
frame
属性,允许你定位日志的源:
onwarn
类型:
(warning: RollupLog, defaultHandler: (warning: string | RollupLog) => void) => void;
一个函数,用于拦截警告信息。它与
onLog
非常相似,但只接收警告。如果调用默认处理程序,日志将被处理为警告。如果提供了
onLog
和
onwarn
处理程序,只有当
onLog
调用其默认处理程序时,
onwarn
处理程序才会被调用,且
level
为
warn
。
查看
onLog
了解更多信息
output.assetFileNames
类型:
string| ((assetInfo: PreRenderedAsset) => string)
CLI:
--assetFileNames <pattern>
默认:
"assets/[name]-[hash][extname]"
该选项的值是一个匹配模式,用于自定义构建结果中的静态资源名称,或者值为一个函数,对每个资源调用以返回匹配模式。这种模式支持以下的占位符:
-
[extname]
:包含点的静态资源文件扩展名,例如
.css
。
-
[ext]
:不包含点的文件扩展名,例如
css
。
-
[hash]
:基于静态资源内容的哈希。也可以通过例如
[hash:10]
设置一个特定的哈希值长度。默认情况下,它会生成一个 base-64 的哈希值。如果你需要减少字符集的大小,可以查看
output.hashCharacters
。
-
[name]
:静态资源的名称,不包含扩展名。
正斜杠
/
可以用来划分文件到子目录。当值为函数时,
PreRenderedAsset
是
generateBundle
中
OutputAsset
类型的简化版本,它没有
fileName
。另见
output.chunkFileNames
,
output.entryFileNames
。
output.banner/output.footer
类型:
string | ((chunk: RenderedChunk) => string| Promise<string>)
CLI:
--banner
/
--footer <text>
查看
renderChunk
钩子以了解
RenderedChunk
类型。
该选项用于在 bundle 前或后添加一个字符串。其值也可以是一个返回
string
的
Promise
异步函数(注意:
banner
和
footer
选项不会破坏 sourcemaps)。
如果该选项值为函数,那么
chunk
就会包含一些额外的信息,通过
RenderedChunk
类型来表示,它是
generateBundle
钩子中使用的
OutputChunk
类型的简化版本,具有以下区别:
-
code
和
map
没有设置,因为该 chunk 还没有被渲染。
-
所有包含哈希值的引用 chunk 文件名将包含哈希占位符。包括
fileName
、
imports
、
importedBindings
、
dynamicImports
和
implicitlyLoadedBefore
。当你在该选项返回的代码中使用这样的占位符文件名或部分文件名时,Rollup 将在
generateBundle
之前用实际的哈希值替换掉占位符,确保哈希值反映的是最终生成的 chunk 中的实际内容,包括所有引用的文件哈希值。
chunk
是可变的,在这个钩子中应用的变化将传递到其他插件和生成的 bundle 中。这意味着如果你在这个钩子中增加或删除引入或导出,你应该更新
imports
、
importedBindings
以及
exports
。
另见
output.intro/output.outro
。
output.chunkFileNames
类型:
string | ((chunkInfo: PreRenderedChunk) => string)
CLI:
--chunkFileNames <pattern>
默认:
"[name]-[hash].js"
该选项用于对代码分割中产生的 chunk 自定义命名,其值也可以是一个函数,对每个 chunk 调用以返回匹配模式。这种模式支持以下的占位符:
-
[format]
:输出(output)选项中定义的格式(format),例如
es
或
cjs
。
-
[hash]
:仅基于最终生成的 chunk 内容的哈希值,其中包括
renderChunk
中的转换部分和其依赖文件哈希值。你也可以通过例如
[hash:10]
设置一个特定的哈希值长度。默认情况下,它会生成一个 base-64 的哈希值。如果你需要减少字符集的大小,可以查看
output.hashCharacters
。
-
[name]
:chunk 的名称。它可以通过
output.manualChunks
选项显示的设置,或者通过插件调用
this.emitFile
设置。否则,它将会根据 chunk 的内容确定。
正斜杠
/
可以用来划分文件到子目录。当值为函数时,
PreRenderedChunk
就是
generateBundle
中
OutputChunk
类型的简化版本,它没有依赖于文件名的属性,也没有关于所渲染模块的信息,因为渲染只会在文件名生成之后进行。然而,你还是可以访问到
moduleIds
列表。另见
output.assetFileNames
,
output.entryFileNames
。
output.compact
类型:
boolean
CLI:
--compact
/
--no-compact
默认:
false
该选项用于压缩 Rollup 产生的额外代码。请注意,这个选项不会影响用户的代码。这个选项在构建已经压缩好的代码时是很有用的。
output.dynamicImportInCjs
类型:
boolean
CLI:
--dynamicImportInCjs
/
--no-dynamicImportInCjs
默认:
true
虽然 CommonJS 输出最初只支持
require(…)
语法来引入依赖,但最近的 Node 版本也开始支持
import(…)
语法,这是从 CommonJS 文件中引入 ES 模块的唯一方法。如果这个选项默认值为
true
,表示 Rollup 会在 CommonJS 输出中保持外部依赖以
import(…)
表达式动态引入。将值设置为
false
,以使用
require(…)
语法重写动态引入。