Это явление проблематично, но из-за множественности слоев (2), работающих вместе для генерации выходных данных, это умение невозможно.
Это потому, что import
и export
ведут себя не так, как CommonJS
.Неважно, что import
и export
являются ссылками (даже с примитивными переменными), тогда как CommonJS
не манипулирует экспортированными значениями (поэтому на примитивные значения ссылаться не будет).
Доказательство того, что 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);
И именно поэтому эта оптимизация никогда не будет работать без какого-либо общего стандарта между слоями.