Я нахожусь в процессе обновления с веб-пакета 3 до веб-пакета 4. Веб-пакет 3 работал великолепно, пока мне не пришлось использовать динамический импорт, а затем плагин uglify, похоже, запутался при импорте фрагмента HTML. Поэтому я подумал, что пришло время обновиться до Webpack 4.
Мой проект - это многостраничное приложение, каждая страница которого имеет свою точку входа. Я использую машинопись. Я построил его так, чтобы у меня был статический пакет поставщиков, который загружает большие сторонние пакеты, которые я использую (knockout и jquery).
Затем каждая точка входа в страницу объединяется в отдельный пакет.
Это отлично работает и по большей части работает.
Вот мой конфиг оптимизатора:
optimization: {
runtimeChunk: {
name: "manifest"
},
splitChunks: {
chunks: 'async',
maxInitialRequests: Infinity,
minSize: 0,
cacheGroups: {
vendor: {
test: /[\\/](knockout|bootstrap|jquery|moment|messenger-hubspot|tslib|native-promise-only)[\\/]/,
name: 'vendor',
filename: '[name].[chunkhash].js',
chunks: 'all'
}
}
},
namedChunks: true,
namedModules: true,
noEmitOnErrors: true
}
Проблема возникает для пакета с именем Knockout.validation. Он определен как модуль UMD, но ничего не возвращает. То, что он делает, это присоединяет себя к объекту-нокауту, который ему требуется в качестве аргумента через 'define'. так что это определенно модуль с побочными эффектами. После импорта модуля к нему можно получить доступ через ko.validation, где ko - импортированный экземпляр выбивки.
Мой код вызова машинописного текста выглядит примерно так:
import * as ko from "knockout"
import "knockout.validation"
ko.validation.init(...);
Проблема в том, что мне не удалось заставить веб-пакет в производственном режиме фактически включить код модуля knockout.validation в полученный пакет. Я пробовал много, много разных вещей. Но Webpack 4 просто не будет включать его.
Я извлекаю knockout.validation и @ types / knockout.validation через npm.
Я пробовал следующие вещи.
- Я добавил его в тестовый шаблон группы кеша, но он не загружает пакет в комплект поставщика.
- Я использовал ProvidPlugin для отображения ko.validation на «knockout.validation»
- Я использовал плагин providePlugin для отображения ko на 'knockout.validation'
- Я изменил package.json для knockout.validation, указав, что он имеет побочный эффект, установив sideEffects: true
Я добавил правило в начале набора правил с этим конфигом:
{
test: /knockout.validation/,
sideEffects: true
},
- Я попытался скопировать код в свой исходный код и настроить его, как другой пакет, который имеет побочные эффекты, который загружается (включая файл объявления типа), и все еще не загружается
- когда я скопировал его, я переименовал его в валидацию, просто добавив '.' в названии файла все было не так.
Я также включил все выходные данные статистики, чтобы посмотреть, скажет ли он мне, почему он их не включал, но даже при включенной статистике проверка вывода не упоминалась в выходных данных, хотя она всегда говорила 17 скрытых модулей.
Какие-либо предложения о том, почему веб-пакет не включает этот пакет? В режиме разработки все работает просто отлично, и webpack-dev-server обслуживает пакет без проблем.