# 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
Last Updated: 6/14/2023, 8:56:23 AM