【Webpack】コンセプト
4610 ワード
1.0コンセプト
WebPackはモジュールパッケージング機と見なすことができます.それは、あなたのプロジェクト構造を分析し、JavaScriptモジュールや他のブラウザで直接実行できない拡張言語(Scss、Type Scriptなど)を見つけ、ブラウザの使用のために適切なフォーマットにパッケージングすることです.ソースコードは、次のような内容の実行可能JavaScript、CSS、HTMLコードに変換されます. :TypeScript JavaScript、SCSS CSS 。
: JavaScript、CSS、HTML , 。
: 、 。
: , 。
: , 、 。
: , 。
: , 。
、 , , 。 , 。
2.0どのように動作しますか?
あなたのプロジェクトを全体として、index.jsなどの特定のプライマリファイルを通じて、Webpackはこのファイルからあなたのプロジェクトのすべての依存ファイルを見つけ、loadersを使用して処理し、最後にブラウザで識別できるJavaScriptファイルにパッケージ化します.gulp機能と同様に、実装原理に違いがあり、Webpackの処理速度はより速く、より直接的で、より多くの異なるタイプのファイルをパッケージ化することができます.その4つのコア概念:エントリ(entry)、出力(output)、loader、プラグイン(plugins).
3.コアコンセプト
3.1.いりぐち
どのモジュールを使用して、その内部依存図の構築の開始とします.入口起点に入ると、webpackはどのモジュールとライブラリが入口起点(直接と間接)に依存しているかを見つけます.webpack
では、entry
プロパティが構成され、1つのエントリの開始点(または複数のエントリの開始点)を指定します.webpack.config.jsでのエントリの構成:
:TypeScript JavaScript、SCSS CSS 。
: JavaScript、CSS、HTML , 。
: 、 。
: , 。
: , 、 。
: , 。
: , 。
、 , , 。 , 。
あなたのプロジェクトを全体として、index.jsなどの特定のプライマリファイルを通じて、Webpackはこのファイルからあなたのプロジェクトのすべての依存ファイルを見つけ、loadersを使用して処理し、最後にブラウザで識別できるJavaScriptファイルにパッケージ化します.gulp機能と同様に、実装原理に違いがあり、Webpackの処理速度はより速く、より直接的で、より多くの異なるタイプのファイルをパッケージ化することができます.その4つのコア概念:エントリ(entry)、出力(output)、loader、プラグイン(plugins).
3.コアコンセプト
3.1.いりぐち
どのモジュールを使用して、その内部依存図の構築の開始とします.入口起点に入ると、webpackはどのモジュールとライブラリが入口起点(直接と間接)に依存しているかを見つけます.webpack
では、entry
プロパティが構成され、1つのエントリの開始点(または複数のエントリの開始点)を指定します.webpack.config.jsでのエントリの構成:
//
module.exports = {
entry: './path/to/my/entry/file.js'
};
//
module.exports = {
entry: {
main: './path/to/my/entry/file.js'
}
};
//
module.exports = {
entry: {
app: './src/app.js',
vendors: './src/vendors.js'
}
};
const config = {
entry: {
app: './src/app.js',
vendors: './src/vendors.js'
}
};
Webpackはappからjsとvendors.jsは、互いに完全に分離され、互いに独立した依存図の作成を開始する.この方法は、vendorを除く1つのエントリ起点のみの単一ページアプリケーション(single page application)で一般的です.<2>マルチページアプリケーション
const config = {
entry: {
pageOne: './src/pageOne/index.js',
pageTwo: './src/pageTwo/index.js',
pageThree: './src/pageThree/index.js'
}
};
Webpackには3つの独立した依存図が必要で、複数のページアプリケーションでは、ページがジャンプするたびにサーバが新しいHTMLドキュメントを取得します.ページは新しいドキュメントを再ロードし、リソースは再ダウンロードされます.
3.2. しゅつりょく
Webpackが作成したbundlesをどこで出力するか、デフォルト値は./dist.基本的には、アプリケーション構造全体が、指定した出力パスのフォルダにコンパイルされます.これらの処理手順は、構成にoutputフィールドを指定することによって構成されます.
//Node.js ,
const path = require('path');
module.exports = {
entry: './path/to/my/entry/file.js',
output: {
//__dirname
path: path.resolve(__dirname, 'dist'),
filename: 'my-first-webpack.bundle.js'
}
};
(1)output.filenameこのオプションは、各出力bundleの名前を決定します.
filename: "bundle.js"
//
filename: "[name].bundle.js"
// chunk id
filename: "[id].bundle.js"
// , hash
filename: "[name].[hash].bundle.js"
// chunk hash
filename: "[chunkhash].bundle.js"
3.3. loader
loaderはモジュールの
に使用され、loaderはすべてのタイプのファイルをアプリケーションの依存図(および最終的なbundle)に変換します.従って、loader “ (task)”
は、フロントエンド構築ステップを処理する強力な方法を提供する.loaderは、TypeScriptなどの異なる言語からJavaScriptにファイルを変換したり、インライン画像をdata URLに変換したりすることができます.loaderはJavaScriptモジュールのimport CSSファイルを直接使用することもできます!Webpackの構成ではloaderには2つのプロパティがあります.function resolve (dir) {
return path.join(__dirname, '..', dir)
}
module: {
rules: [
{ test: /\.css$/, use: 'css-loader' },
{ test: /\.ts$/, use: 'ts-loader' },
{
test: /\.js$/,
loader: 'babel-loader',
include: [resolve('src'), resolve('test')]
}
]
}
3.4.プラグイン
oaderは、いくつかのタイプのモジュールを変換するために使用され、プラグインは
に使用され得る.プラグインの範囲には、パッケージの最適化と圧縮から、環境内の変数の再定義までが含まれます.詳細な使い方:require()だけを必要とし、plugins配列に追加します.const HtmlWebpackPlugin = require('html-webpack-plugin'); // npm
const webpack = require('webpack'); //
const config = {
module: {
plugins: [
new HtmlWebpackPlugin({template: './src/index.html'})
]
};
module.exports = config;