# output.preserveModules
类型: | boolean |
---|---|
CLI: | --preserveModules/--no-preserveModules |
默认: | false |
该选项将使用原始模块名作为文件名,为所有模块创建单独的 chunk,而不是创建尽可能少的 chunk。它需要配合 output.dir 选项一起使用。除屑优化(Tree-shaking)仍会对没有被入口使用或者执行阶段没有副作用的文件生效,并删除不属于入口起点的未使用文件的导出。另一方面,如果插件(如 @rollup/plugin-commonjs)为实现某些结果而产生了额外的“虚拟”文件,这些文件将作为实际文件使用 _virtual/fileName.js 模式产生。
因此,如果你直接想从这些文件中引入,不建议盲目地使用这个选项将整个文件结构转换为另一种格式,因为预期的输出可能会丢失。在这种情况下,你应该把所有文件明确指定为入口,把它们添加到 input 选项对象 中,可以查看那里的例子。
请注意,在转换为 cjs 或 amd 格式时,设置 output.exports 的值为 auto 可以默认把每个文件作为入口点。这意味着,例如对于 cjs,只包含默认导出的文件将会渲染为:
// 输入 main.js
export default 42;
// 输出 main.js
('use strict');
var main = 42;
module.exports = main;
直接将值赋值给 module.exports。如果有人引入此文件,他们可以通过以下方式访问默认导出
const main = require('./main.js');
console.log(main); // 42
与常规入口点一样,混合使用默认导出和命名导出的模块将会产生警告。你可以通过设置 output.exports: "named",强制所有文件使用命名导出模式来避免出现警告。在这种情况下,可以通过导出的 .default 属性访问默认导出:
// 输入 main.js
export default 42;
// 输出 main.js
('use strict');
Object.defineProperty(exports, '__esModule', { value: true });
var main = 42;
exports.default = main;
// 使用
const main = require('./main.js');
console.log(main.default); // 42