пакет черносливов оптимизатора webpack 4 - как заставить его включить? - PullRequest
0 голосов
/ 16 апреля 2019

Я нахожусь в процессе обновления с веб-пакета 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 обслуживает пакет без проблем.

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