Как предотвратить момент.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 ответов:
код
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';