Czy jest jakiś sposób, aby zatrzymać moment.js
ładowanie wszystkich ustawień narodowych (potrzebuję tylko angielskiego) podczas korzystania z pakietu WebPack? Patrzę na źródło i wygląda na to, że jeśli hasModule
jest zdefiniowane, to jest dla webpacka, to zawsze próbuje require()
wszystkich ustawień regionalnych. Jestem prawie pewien, że to wymaga żądania ściągnięcia, aby to naprawić. Ale czy jest jakiś sposób, aby to naprawić za pomocą konfiguracji webpacka?
Oto moja konfiguracja webpacka, aby załadować momentjs:
resolve: {
alias: {
moment: path.join(__dirname, "src/lib/bower/moment/moment.js")
},
},
Potem, gdziekolwiek tego potrzebuję, po prostu potrzebuję require('moment')
. To działa, ale dodaje około 250 kB niepotrzebnych plików językowych do mojego pakietu. Używam też altanowej wersji momentjs i łyka.
Również jeśli konfiguracja webpack nie może tego naprawić, tutaj jest link do funkcji, w której ładuje ustawienia narodowe . Próbowałem dodać && module.exports.loadLocales
do if
instrukcji, ale wydaje mi się, że webpack tak naprawdę nie działa w taki sposób, aby działało. Po prostu require
nie ważne co. Myślę, że używa teraz wyrażenia regularnego, więc tak naprawdę nie wiem, jak byś to zrobił.
źródło
nmp
zamiastbower
?Odpowiedzi:
Kod
require('./locale/' + name)
może wykorzystywać każdy plik w katalogulocale
. Tak więc webpack zawiera każdy plik jako moduł w pakiecie. Nie może wiedzieć, którego języka używasz.Istnieją dwie wtyczki, które są przydatne, aby przekazać pakietowi internetowemu więcej informacji o tym, który moduł powinien zostać zawarty w pakiecie:
ContextReplacementPlugin
iIgnorePlugin
.require('./locale/' + name)
nazywa się kontekstem (wymaganie zawierające wyrażenie). webpack pobiera pewne informacje z tego fragmentu kodu: Katalog i wyrażenie regularne. Tutaj:directory = ".../moment/locale"
regular expression = /^.*$/
. Tak więc domyślnie każdy plik wlocale
katalogu jest dołączony.ContextReplacementPlugin
Pozwala zastąpić wywieść informacje tj dostarczyć nowe wyrażenie regularne (do wyboru języki, które chcesz dołączyć).Innym podejściem jest zignorowanie wymagania za pomocą
IgnorePlugin
.Oto przykład:
źródło
new webpack.IgnorePlugin(/^\.\/lang$/, /moment$/)
z twojego komentarza na github zadziała.plugins: [ new webpack.IgnorePlugin(/^\.\/locale$/, [/moment$/]) ],
który działał dobrze.W naszym projekcie uwzględniam taki moment:
import moment from 'moment/src/moment';
i to wydaje się załatwić sprawę. Używanie chwili jest jednak bardzo proste, więc nie jestem pewien, czy będą jakieś niespójności z SDK. Myślę, że to działa, ponieważ WebPack nie wie, jak znaleźć pliki ustawień regionalnych, więc pojawia się ostrzeżenie (można to łatwo ukryć, dodając pusty folder wmoment/src/lib/locale/locale
), ale nie zawiera ustawień regionalnych.źródło
moment
biblioteka modułowa pojawi się w wersji 3 github.com/moment/moment/milestone/15 .Właściwa
moment
biblioteka modułowa pojawi się w pewnym momencie w wersji 3, więc obecnie, gdy używam angular-cli, nie--eject
skończyłem z użyciem https://github.com/ksloan/moment-mini jakimport * as moment from 'moment-mini';
źródło
Na podstawie odpowiedzi Adama McCrmicka byłeś blisko, zmień swój alias na:
źródło
Dzięki
webpack2
najnowszym wersjom chwili możesz:A potem w
webpack.config.js
tobie:źródło
mainFields: ...