Webpack不会从另一个文件内联const

时间:2018-06-11 11:53:37

标签: javascript webpack

我有一个带有一些时间计算的文件。 为了“干”,在它的顶部有一个

const HOUR_MS = 60 * 60 * 1000

在已转换的输出中,每个HOUR_MS次出现都与36e5内联。

到目前为止,非常好^ _ ^

BUT!如果我将这个const提取到它自己的文件中,因为我想在更多地方重用它,这就不再适用了。

相反,转换后的输出现在引用了那个const(例如r.HOUR_MS),这意味着它不会像它那样缩小。

这是故意的行为(也许我可以用一些旗帜压制)或者它是一种优化疏忽吗? (即将报告,但他们的GitHub错误模板建议我先问这里)

1 个答案:

答案 0 :(得分:2)

这种现象存在问题,但由于层(2)的多样性共同产生输出,这一壮举是不可行的。

这是因为importexport的行为与CommonJS不同。 无论如何,importexport都是引用(即使是原始变量),而CommonJS不会操纵导出的值(因此,不会引用原始值)。 / p>

证明importexport仅供参考:

1.ts

export let number = 10;

export function increase() {
    number++;
}

2.ts

import {number, increase} from './1';

console.log(number);
increase();
console.log(number);

日志将打印10,11

第1层:TypeScript Transpiler

const number = 10;
console.log(number);

将转变为:

const number = 10;
console.log(number);

但是

export const number = 10;
console.log(number);

将转变为:( 这是问题开始的地方

Object.defineProperty(exports, "__esModule", { value: true });
exports.number = 10;
console.log(exports.number);

第2层:uglify-es

const number = 10;
console.log(number);

将压缩到

console.log(10);

但是

Object.defineProperty(exports, "__esModule", { value: true });
exports.number = 10;
console.log(exports.number);

将压缩为:(这是问题结束的地方

Object.defineProperty(exports, "__esModule", { value: !0 });
exports.number = 10;
console.log(exports.number);

这就是为什么如果层之间没有任何通用标准,这种优化将无法工作。