Я выполняю упражнение по уменьшению размера своего пакета веб-пакетов, и с помощью анализатора пакетов веб-пакетов я увидел, что действительно тяжелый пакет включается в два разных асинхронных блока, хотя он используется только один раз. Немного покопавшись в моем коде, я понял, что это возможно из-за следующего сценария:
file1.js
import { foo } from 'ReallyHeavyPackage'
export function a(): string {
console.log("called a()");
}
export function b(): string {
return foo();
}
file2.js
import { a } from './file1.js'
a();
file3.js
import { b } from './file1.js'
b();
Я предполагаю, что поскольку file1 импортирует тяжелый пакет глобально, а file2 импортирует функцию из file1, он получает тяжелый пакет как зависимость, даже если он не импортирует функцию, которая фактически использует пакет. Я бы ожидал (или, скорее, хотел бы), чтобы только в блоке для file3 была включена тяжелая зависимость, поскольку это единственное место, где он используется.
Есть ли определенный способ, которым я должен обрабатывать импорт, как этот? Возможно, волшебную конфигурацию, которую я могу сделать в веб-пакете, чтобы помочь с этим, лучший способ структурирования модулей / функций или просто лучший способ импорта функций / модулей / пакетов?
Я использую Webpack 4, и я на ES2017