Webpack не вставляет const из другого файла - PullRequest
0 голосов
/ 11 июня 2018

У меня есть файл с несколькими расчетами времени.Чтобы обозначить «СУХОЙ», на его вершине есть

const HOUR_MS = 60 * 60 * 1000

. В переданном выводе каждое вхождение HOUR_MS указывается с помощью 36e5.

Пока что все хорошо ^ _^

НО!Если я извлекаю этот const в его собственный файл, потому что я хочу использовать его в большем количестве мест, это больше не работает.

Вместо этого переносимый вывод теперь имеет ссылки на этот const (например, r.HOUR_MS), что означаетэто не так минимизировано, как могло бы быть.

Это преднамеренное поведение (которое, возможно, я могу подавить с помощью какого-либо флага), или это упущение оптимизации?(собирался сообщить об этом, но их шаблон ошибки GitHub предложил сначала спросить здесь)

1 Ответ

0 голосов
/ 11 июня 2018

Это явление проблематично, но из-за множественности слоев (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);

И именно поэтому эта оптимизация никогда не будет работать без какого-либо общего стандарта между слоями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...