# output.generatedCode

类型: "es5" | "es2015"| { arrowFunctions?: boolean, constBindings?: boolean, objectShorthand?: boolean, preset?: "es5"| "es2015", reservedNamesAsProps?: boolean, symbols?: boolean }
CLI: --generatedCode <preset>
默认: "es5"

该选项用于制定 Rollup 可以在生成的代码中安全地使用哪些语言特性。这不会转译任何用户的代码,而只改变 Rollup 在包装器和辅助函数中使用的代码。你可以从几个预设中选择一个:

  • "es5":不能使用 ES2015+ 的特性,比如箭头函数,不能使用引号包裹的预留词汇作为属性名。
  • "es2015":使用任意 ES2015 之前的 JavaScript 特性。

# output.generatedCode.arrowFunctions

类型: boolean
CLI: --generatedCode.arrowFunctions/--no-generatedCode.arrowFunctions
默认: false

该选项表示是否为自动生成的代码片段使用箭头函数。请注意,在某些地方,比如模块封装器,Rollup 会继续生成用小括号封装的常规函数,因为在一些 JavaScript 引擎中,这些函数会提供 明显更好的性能。

# output.generatedCode.constBindings

类型: boolean
CLI: --generatedCode.constBindings/--no-generatedCode.constBindings
默认: false

该选项表示在某些地方和辅助函数中使用 const 而不是 var。由于代码块的作用域,会使 Rollup 产生更有效的辅助函数。

// 输入
export * from 'external';

// 设置 constBindings 为 false 的 cjs 输出
var external = require('external');

Object.keys(external).forEach(function (k) {
	if (k !== 'default' && !exports.hasOwnProperty(k))
		Object.defineProperty(exports, k, {
			enumerable: true,
			get: function () {
				return external[k];
			}
		});
});

// 设置 constBindings 为 true 的 cjs 输出
const external = require('external');

for (const k in external) {
	if (k !== 'default' && !exports.hasOwnProperty(k))
		Object.defineProperty(exports, k, {
			enumerable: true,
			get: () => external[k]
		});
}

# output.generatedCode.objectShorthand

类型: boolean
CLI: --generatedCode.objectShorthand/--no-generatedCode.objectShorthand
默认: false

该选项表示当属性名称与值匹配时,是否允许在对象中使用别名。

// input
const foo = 1;
export { foo, foo as bar };

// 设置 objectShorthand 为 false 的系统输出
System.register('bundle', [], function (exports) {
	'use strict';
	return {
		execute: function () {
			const foo = 1;
			exports({ foo: foo, bar: foo });
		}
	};
});

// 设置 objectShorthand 为 true 的系统输出
System.register('bundle', [], function (exports) {
	'use strict';
	return {
		execute: function () {
			const foo = 1;
			exports({ foo, bar: foo });
		}
	};
});

# output.generatedCode.preset

类型: "es5" | "es2015"
CLI: --generatedCode <value>

该选项可以选择上面列出的预设之一,同时覆盖一些选项。

export default {
	// ...
	output: {
		generatedCode: {
			preset: 'es2015',
			arrowFunctions: false
		}
		// ...
	}
};

# output.generatedCode.reservedNamesAsProps

类型: boolean
CLI: --generatedCode.reservedNamesAsProps/--no-generatedCode.reservedNamesAsProps
默认: true

该选项确定像 default 这样的预留词,是否可以在不加引号的情况下作为属性名。这将使生成的代码语法符合 ES3 标准。但是请注意,为了完全符合 ES3 标准,你可能还需要对一些内置函数进行补丁(polyfill),比如 Object.keys 或 Array.prototype.forEach。

// 输入
const foo = null;
export { foo as void };

// 设置 reservedNamesAsProps 为 false 的 cjs 输出
const foo = null;

exports['void'] = foo;

// 设置 reservedNamesAsProps 为 true 的 cjs 输出
const foo = null;

exports.void = foo;

# output.generatedCode.symbols

类型: boolean
CLI: --generatedCode.symbols/--no-generatedCode.symbols
默认: false

该选项确定是否允许在自动生成的代码片断中使用 Symbol。目前,该选项只控制命名空间是否将 Symbol.toStringTag 属性设置为正确的 Module 值,这意味着对于一个命名空间来说,String(namespace) 打印为 [object Module]。该值又被用于某些库和框架的特征检测。

// 输入
export const foo = 42;

// 设置 symbols 为 false 的 cjs 输出
const foo = 42;

exports.foo = foo;

// 设置 symbols 为 true 的 cjs 输出
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });

const foo = 42;

exports.foo = foo;
Last Updated: 6/14/2023, 8:56:23 AM