Est-il possible d'arrêter le moment.js
chargement de tous les paramètres régionaux (j'ai juste besoin d'anglais) lorsque vous utilisez webpack? Je regarde la source et il semble que si hasModule
est défini, ce qui est pour webpack, alors il essaie toujours de require()
tous les paramètres régionaux. Je suis presque sûr que cela a besoin d'une demande de tirage pour corriger. Mais existe-t-il un moyen de résoudre ce problème avec la configuration du webpack?
Voici ma configuration webpack pour charger momentjs:
resolve: {
alias: {
moment: path.join(__dirname, "src/lib/bower/moment/moment.js")
},
},
Ensuite, partout où j'en ai besoin, je le fais require('moment')
. Cela fonctionne, mais cela ajoute environ 250 Ko de fichiers de langue inutiles à mon bundle. J'utilise également la version bower de momentjs et gulp.
De plus, si cela ne peut pas être corrigé par la configuration du webpack, voici un lien vers la fonction où il charge les locales . J'ai essayé d'ajouter && module.exports.loadLocales
à la if
déclaration, mais je suppose que le webpack ne fonctionne pas réellement d'une manière où cela fonctionnerait. C'est juste require
quoi qu'il arrive. Je pense qu'il utilise un regex maintenant, donc je ne sais pas vraiment comment vous pourriez y remédier.
la source
nmp
au lieu debower
?Réponses:
Le code
require('./locale/' + name)
peut utiliser tous les fichiers dulocale
. Webpack inclut donc chaque fichier en tant que module dans votre bundle. Il ne peut pas savoir quelle langue vous utilisez.Il existe deux plugins qui sont utiles pour donner au webpack plus d'informations sur le module à inclure dans votre bundle:
ContextReplacementPlugin
etIgnorePlugin
.require('./locale/' + name)
est appelé un contexte (un besoin qui contient une expression). webpack déduit certaines informations de ce fragment de code: un répertoire et une expression régulière. Ici:directory = ".../moment/locale"
regular expression = /^.*$/
. Donc, par défaut, chaque fichier dulocale
répertoire est inclus.le
ContextReplacementPlugin
permet de remplacer les informations déduites, c'est-à-dire de fournir une nouvelle expression régulière (pour choisir les langues que vous souhaitez inclure).Une autre approche consiste à ignorer l'exigence avec le
IgnorePlugin
.Voici un exemple:
la source
new webpack.IgnorePlugin(/^\.\/lang$/, /moment$/)
votre commentaire sur github fonctionnera.plugins: [ new webpack.IgnorePlugin(/^\.\/locale$/, [/moment$/]) ],
ce qui a très bien fonctionné.Dans notre projet, j'inclus un moment comme celui-ci:
import moment from 'moment/src/moment';
et cela semble faire l'affaire. Notre utilisation de moment est cependant très simple, donc je ne sais pas s'il y aura des incohérences avec le SDK. Je pense que cela fonctionne parce que WebPack ne sait pas comment trouver les fichiers de paramètres régionaux de manière statique, vous obtenez donc un avertissement (qui est facile à masquer en ajoutant un dossier vide àmoment/src/lib/locale/locale
), mais aucun paramètre régional ne comprend.la source
moment
bibliothèque modulaire appropriée proposera la version 3 github.com/moment/moment/milestone/15 à un moment donné.La
moment
bibliothèque modulaire appropriée proposera la version 3 à un moment donné, donc actuellement, comme j'utilise angular-cli sans que--eject
je finisse par utiliser https://github.com/ksloan/moment-mini commeimport * as moment from 'moment-mini';
la source
D'après la réponse d'Adam McCrmick, vous étiez proche, changez votre alias en:
la source
Avec
webpack2
les versions récentes de moment, vous pouvez faire:Et puis en
webpack.config.js
vous:la source
mainFields: ...