Так работают модули по умолчанию. Если какая-либо часть модуля импортируется хотя бы один раз, весь модуль выполняет весь код верхнего уровня.
Возможно удалить мертвый код, который не запускается с дерево трясется в Webpack, но у показанного модуля нет мертвого кода - у него есть экспортированная функция, которая используется, и у него есть код, который запускается на верхнем уровне и вызывается (console.log
, объявление xyx
и вызов xyx
).
Если вы экспортировали что-то, что не использовалось где-либо еще в модуле, это можно было бы отбросить при встряхивании дерева, Например:
export function abc(){
var a = 10;
}
export function def(){
var a = 10;
}
Здесь, если def
не импортируется и не используется в другом месте, он может быть автоматически удален.
(Также обратите внимание, что определения функций требуют ()
с после них, даже если они не принимают аргументов)
Именно из-за этого я почти всегда экспортирую только функции - хорошо избегать написания кода с побочными эффектами на верхнем уровне модуля, потому что тогда просто импортировать модуль приведет к этим побочным эффектам (как вы видите здесь). Как правило, структурировать код проще, если у вас есть одна точка входа (например, main.js
), которая импортирует необходимые функции и затем вызывает их. Если каждый модуль выполняет код с побочными эффектами как часть верхнего уровня, вещи могут быстро стать очень запутанными и неуправляемыми. (Эта техника также улучшает дрожание деревьев, но это лишь побочное преимущество)