我有一个带有一些时间计算的文件。 为了“干”,在它的顶部有一个
const HOUR_MS = 60 * 60 * 1000
在已转换的输出中,每个HOUR_MS
次出现都与36e5
内联。
到目前为止,非常好^ _ ^
BUT!如果我将这个const提取到它自己的文件中,因为我想在更多地方重用它,这就不再适用了。
相反,转换后的输出现在引用了那个const(例如r.HOUR_MS
),这意味着它不会像它那样缩小。
这是故意的行为(也许我可以用一些旗帜压制)或者它是一种优化疏忽吗? (即将报告,但他们的GitHub错误模板建议我先问这里)
答案 0 :(得分:2)
这种现象存在问题,但由于层(2)的多样性共同产生输出,这一壮举是不可行的。
这是因为import
和export
的行为与CommonJS
不同。
无论如何,import
和export
都是引用(即使是原始变量),而CommonJS
不会操纵导出的值(因此,不会引用原始值)。 / p>
证明import
和export
仅供参考:
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);
这就是为什么如果层之间没有任何通用标准,这种优化将无法工作。