こんにちは、webpackを使用しているときにmoment.jsがすべてのロケール(私は英語が必要です)をロードしないようにすることができますか?ソースを見ていると、webpack用のhasModuleが定義されている場合、常にすべてのロケールをrequire()しようとしているようです。これを修正するにはプルリクエストが必要だと確信しています。しかし、とにかくこれをwebpack configで修正できますか。
ここにmomentjsをロードするための私のwebpack設定があります
resolve: {
alias: {
moment: path.join(__dirname, "src/lib/bower/moment/moment.js")
},
},
それから私はそれを必要とする場所で私は単にrequire( 'moment')しますが、それは私のバンドルに約250kbの不要な言語ファイルを追加します。また、mowerjsとgulpのbowerバージョンを使用しています。
また、これがwebpack構成によって修正できない場合は、ロケールをロードする関数へのリンクがあります https://github.com/moment/moment/blob/develop/moment.js#L760- L772 ifステートメントに「&& module.exports.loadLocales」を追加しようとしましたが、今では正規表現を使用していると思っても、webpackがうまく機能しないようです。それを修正する方法を本当に知っている。とにかく助けてくれてありがとう。
コードrequire('./locale/' + name)
は、locale
ディレクトリー内のすべてのファイルを使用できます。したがって、webpackには、バンドル内のすべてのファイルがモジュールとして含まれています。使用している言語がわかりません。
2つのプラグイン があり、これはwebpackにバンドルに含めるモジュールに関する詳細情報を提供するのに役立ちます:ContextReplacementPlugin
およびIgnorePlugin
。
require('./locale/' + name)
は context (式を含むrequire)と呼ばれます。 webpackは、このコードフラグメントからいくつかの情報を推測します。ディレクトリと正規表現です。ここ:directory = ".../moment/locale"
regular expression = /^.*$/
。したがって、デフォルトでは、locale
ディレクトリ内のすべてのファイルが含まれます。
ContextReplacementPlugin
により、推論された情報をオーバーライドできます。つまり、新しい正規表現を提供できます(組み込みたい言語を選択するため)。
別のアプローチは、IgnorePlugin
でrequireを無視することです。
以下に例を示します。
var webpack = require("webpack");
module.exports = {
// ...
plugins: [
new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /de|fr|hu/)
// new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/)
]
};
私たちのプロジェクトでは、import moment from 'moment/src/moment';
のような瞬間を含めています。これでうまくいくようです。ただし、モーメントの使用方法は非常に単純なので、SDKに矛盾があるかどうかはわかりません。 WebPackはロケールファイルを静的に見つける方法を知らないため、これが機能すると思うので、警告が表示されます(moment/src/lib/locale/locale
に空のフォルダを追加することで簡単に非表示になります)。
webpack2
と最近のバージョンで次のことができます。
import {fn as moment} from 'moment'
そして、webpack.config.js
で次のことを行います。
resolve: {
packageMains: ['jsnext:main', 'main']
}
適切なモジュラーmoment
ライブラリは、ある時点で バージョン になるので、現在--eject
なしでangle-cliを使用しているので、 https://github.com/ ksloan/moment-mini like import * as moment from 'moment-mini';
Adam McCrmickの答えに基づいて、あなたは近くにいて、エイリアスを次のように変更しました。
resolve: {
alias: {
moment: 'moment/src/moment'
},
},