Как предотвратить момент.js от загрузки локалей с помощью webpack?


Привет есть в любом случае, вы можете остановить момент.js от загрузки всех локалей (мне просто нужен английский), когда вы используете webpack? Я смотрю на источник кажется, что если hasModule определен, какой он для webpack, то он всегда пытается требовать() каждую локаль. Я уверен, что это нужно тянуть запрос, чтобы исправить. Но в любом случае мы можем исправить это с webpack конфигурации.

вот мой webpack config для загрузки momentjs

resolve: {
            alias: {
                moment: path.join(__dirname, "src/lib/bower/moment/moment.js")
            },
        },

тогда где мне это нужно, я просто делаю require ('moment') это работает, но его добавление около 250 КБ ненужных языковых файлов в мой пакет. Также я использую версию bower momentjs и gulp.

также, если это не может быть исправлено конфигурацией webpack, вот ссылка на функцию, где она загружает локали https://github.com/moment/moment/blob/develop/moment.js#L760-L772 я попытался добавить " & & модуль.поставляемый.loadLocales " к оператору if, но я предполагаю, что webpack не работает так, как это будет работать это просто требует независимо от того, что я думаю, что он использует регулярное выражение сейчас, так что я действительно не знаю, как бы вы даже пошли на его исправление. В любом случае спасибо за любую помощь.

5 184

5 ответов:

код require('./locale/' + name) можно использовать любой файл в locale реж. Таким образом, webpack включает каждый файл в качестве модуля в вашем пакете. Он не может знать, какой язык вы используете.

здесь два Плагины это полезно, чтобы дать webpack дополнительную информацию о том, какой модуль должен быть включен в ваш пакет:ContextReplacementPlugin и IgnorePlugin.

require('./locale/' + name) называется a контекст (требование, которое содержит выражение). webpack выводит некоторую информацию из этого фрагмента кода: каталог и регулярное выражение. Здесь:directory = ".../moment/locale"regular expression = /^.*$/. Так что по умолчанию каждый файл в

в нашем проекте, я включаю момент такой: import moment from 'moment/src/moment'; и это, кажется, делает трюк. Однако наше использование момента очень просто, поэтому я не уверен, будут ли какие-либо несоответствия с SDK. Я думаю, что это работает, потому что WebPack не знает, как найти файлы локали статически, поэтому вы получаете предупреждение (это легко скрыть, добавив пустую папку в moment/src/lib/locale/locale), но нет языка включает.

основываясь на ответе Адама Маккрмика, вы были близки, измените свой псевдоним на:

resolve: {
    alias: {
        moment: 'moment/src/moment'
    },
},

С webpack2 и последние версии момента вы можете сделать:

import {fn as moment} from 'moment'

а потом в webpack.config.js вы:

resolve: {
    packageMains: ['jsnext:main', 'main']
}

правильная модульная moment библиотека придумают Вариант 3 в какой-то момент так в настоящее время, как я использую angular-cli без --eject Я только что закончил использовать https://github.com/ksloan/moment-mini нравится import * as moment from 'moment-mini';