# 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;