webpack
ローダーとプラグイン
サーチ…
備考
ローダーとプラグインがWebpackのビルディングブロックを構成します。
ローダは、通常、単一のタスクとファイルタイプに委譲されます。これらはセットアップが容易で、通常は定型コードが少なくて済みます。
一方、プラグインは、Webpackの内部ビルドシステムにフック経由でアクセスできるため、より強力です。プラグインは完全に構成されたWebpack環境を変更することができ、コンパイルプロセス全体でカスタムアクションを実行できます。
たとえば、CSSファイルを扱う場合、ローダーを使用してベンダー接頭辞をプロパティーに自動的に追加することができますが、プラグインを使用してバンドラー構築プロセスで縮小されたスタイルシートを生成することができます。
ローダーの使い方
まず、プロジェクトのローダーをnpm install
します。
webpack.config.js
でエクスポートされているコンフィグレーションオブジェクトの内部に、 module
プロパティがすべてのローダを保持します。
const source = `${__dirname}/client/src/`;
module.exports = {
// other settings here
module: {
loaders: [
{
test: /\.jsx?$/,
include: source,
loaders: ['babel?presets[]=es2015,presets[]=react', 'eslint']
},
{
test: /\.s?css$/,
include: source,
loaders: ['style', 'css', 'autoprefixer', 'sass']
}
]
},
};
上記の設定では、ローダーに3つの基本設定を使用しています。
- test:これは、RegExpを使用して特定の拡張機能にローダーをバインドする場所です。最初のローダーセットはすべての.jsファイルと.jsxファイルで実行されています。 2番目のセットは、すべての.cssファイルと.scssファイルで実行されています。
- include:これは、ローダーに実行させるディレクトリです。必要に応じて、
exclude
プロパティを使用して、exclude
思われるディレクトリを簡単に定義することもできます。 - loaders:これは、
test
およびinclude
指定されたファイルに対して実行するすべてのローダーのリストです。
ローダーは、ローダー配列ごとに右から左へ、個々の定義の下から上へと実行されることに注意してください。以下のコードは、 sass, autoprefixer, css, style
順でローダーを実行します。
loaders: [
{
test: /\.s?css$/,
include: source,
loaders: ['style', 'css', 'autoprefixer']
},
{
test: /\.s?css$/,
include: source,
loaders: ['sass']
}
]
これは、webpackを初めて使用する開発者にとって混乱とバグの共通の原因です。たとえば、JSXとES6の構文を使用する場合、私たちはそのコードを埋め込み、私たちのbabelローダーによって提供されたコンパイルされたコードを埋め込むのではありません 。したがって、私たちのエスリントローダーは私たちのバベルローダーの右に置かれています。
私たちのローダーをリストするときは、 -loader
接尾辞はオプションです。
loaders: ['sass']
...と同等です:
loaders: ['sass-loader']
あるいは、ローダーのリストを文字列と一緒に区切ってloader
プロパティ(単数)を使用することもできます!
キャラクター。
loaders: ['style', 'css']
...と同等です:
loader: "style!css"
タイプスクリプトファイルの読み込み
webcapでtypescriptを使用するには、 typescript
とts-loader
インストールされている必要があります。
npm --save-dev install typescript ts-loader
これで、typescriptファイルを使用するようにwebpackを設定できるようになりました
// webpack.config.js
module.exports = {
..
resolve: {
// .js is required for react imports.
// .tsx is required for react tsx files.
// .ts is optional, in case you will be importing any regular ts files.
extensions: ['.js', '.ts', '.tsx']
},
module: {
rules: [
{
// Set up ts-loader for .ts/.tsx files and exclude any imports from node_modules.
test: /\.tsx?$/,
loaders: isProduction ? ['ts-loader'] : ['react-hot-loader', 'ts-loader'],
exclude: /node_modules/
}
]
},
...
};