webpack 4を進撃する(基本編一)
3505 ワード
テーマ
本稿はwebpackの基礎部分であり、どのように0から工程環境を構築するかを目的とし、パッケージ化後にどのようなコードが生成されるかを簡単に紹介し、webpackの一般的な各種loaderを紹介します.
プロジェクト初期化
webpackをインストールする
現在のディレクトリで直接実行
パッケージ化に成功し、ディレクトリの下でdistファイルを作成しました.
npxはnode_を探しに行きますmodules/.bin/webpack.cmdファイル
このファイルは現在のディレクトリにnode.exeがあるかどうかを判断し、現在のディレクトリのwebpack.jsをnodeで実行していないかを判断しました.一級上のwebpack.jswebpack.jsはwebpack-cli.jsを探します.webpack-cliのファイルディレクトリの下でconfig-yargs.jsの配置ファイルの中の要求事項を見つけられます.
プロジェクトのルートディレクトリの下でファイルwebpack.co.nfig.jsを新規作成してエクスポートします.
しばらくほっといてくださいwebpack_リキュール上の属性を簡単に書いてください.
一つの自己実行関数が一つのobjに入ってきて、内部で自分で一つのrequire方法を定義して、requireの実行結果を返します.
Objのkeyはファイルを包装するパスで、valueは関数で、メソッドはevalでindex.js内部のコードを実行します.
ポイントはrequireが何をしましたか?
moduleIdは_u u uですwebpack_require_.s='/src/index.js'
キャッシュ
このコードはこのOB jのコードブロックを実行するということで、コンテキストはmodule.exportを指して、moduleに入ってきます.module.exportは、require関数とパラメータをします.
modules[moduleId].callすることは、着信モジュールmoduleIdに対応するコードを実行するだけです.
注:この時index.js内部にimportなどの他のモジュールを導入すれば、他のモジュールもobjのkeyとvalue形式に解析できます.彼は再帰的にrequireで解析します.
例えばindex.jsの中でimport a from./a.js'の彼のvalueはこのようです.
require.nは、require.dを実行してモジュールを取得する方法であり、
require.dは、この関数に'a'を追加し、getter.aにアクセスするときにgetterを実行します.
最後に、このように繰り返して包装して最終的にmodule.exportを生成して戻ってきます.
module.lがtrueを変更すると、このmoduleはすでにパッケージ化されています.最後にmodule.exportsに戻ります.
次の予告:webpack.co.nfig.jsの配置
本稿はwebpackの基礎部分であり、どのように0から工程環境を構築するかを目的とし、パッケージ化後にどのようなコードが生成されるかを簡単に紹介し、webpackの一般的な各種loaderを紹介します.
プロジェクト初期化
webpackをインストールする
yarn init -y
個人的にはyarn初期化項目で完成したら好きです.yarn add webpack webpack-cli -D
また、目次にsrcファイルを新規作成して、ソースコードを入れるために、srcはindex.jsを作成します.今回のエントリファイルとしてindex.jsは何を入力してもいいですか?現在のディレクトリで直接実行
npx webpack
警告私達はmodeの指定を設定する必要があります.生産環境ですか?それとも開発環境ですか?パッケージ化に成功し、ディレクトリの下でdistファイルを作成しました.
npxはnode_を探しに行きますmodules/.bin/webpack.cmdファイル
このファイルは現在のディレクトリにnode.exeがあるかどうかを判断し、現在のディレクトリのwebpack.jsをnodeで実行していないかを判断しました.一級上のwebpack.jswebpack.jsはwebpack-cli.jsを探します.webpack-cliのファイルディレクトリの下でconfig-yargs.jsの配置ファイルの中の要求事項を見つけられます.
.options({
config: {
type: "string",
describe: "Path to the config file",
group: CONFIG_GROUP,
defaultDescription: "webpack.config.js or webpackfile.js",
requiresArg: true
},
ここでwebpackのデフォルトのプロファイルを説明します.webpack.co.nfig.jsまたはwebpackfile.jsという名前が必要です.ですから、私達はカスタムの名前で設定する必要があります.コマンドラインに自分でconfigを追加してwebpackを指定します.どの設定で包装しますか?npx webpack --config [webpack-config path]
包装した後の書類プロジェクトのルートディレクトリの下でファイルwebpack.co.nfig.jsを新規作成してエクスポートします.
const path = require('path')
module.exports = {
mode:'development', //
entry:'./src/index.js', //
output:{
filename:'bundle.js', //
path:path.resolve(__dirname,'./dist') // node path
}
}
再実行npx webpack
このbundle.jsの長さはどうですか?しばらくほっといてくださいwebpack_リキュール上の属性を簡単に書いてください.
一つの自己実行関数が一つのobjに入ってきて、内部で自分で一つのrequire方法を定義して、requireの実行結果を返します.
Objのkeyはファイルを包装するパスで、valueは関数で、メソッドはevalでindex.js内部のコードを実行します.
ポイントはrequireが何をしましたか?
moduleIdは_u u uですwebpack_require_.s='/src/index.js'
キャッシュ
{'./src/index.js':...}
が存在する場合、すなわちパッケージ化された場合、そのまま戻ってきます.ない場合はオブジェクトを作成します.{
i:moduleId, //
l:false, //
exports:{}
}
そしてmoduleに引用し、modules[moduleId].callでmodulesを実行すると、一番外部から入ってきた自己実行関数のパラメータobj{'path':コードブロック}です.このコードはこのOB jのコードブロックを実行するということで、コンテキストはmodule.exportを指して、moduleに入ってきます.module.exportは、require関数とパラメータをします.
(function(module, exports) { // module module(installedModules[moduleId]) ,exports module.exports
eval("console.log('webpack')
//# sourceURL=webpack:///./src/index.js?");
})
このコードが実行されると'webpack'が出力されます.modules[moduleId].callすることは、着信モジュールmoduleIdに対応するコードを実行するだけです.
注:この時index.js内部にimportなどの他のモジュールを導入すれば、他のモジュールもobjのkeyとvalue形式に解析できます.彼は再帰的にrequireで解析します.
例えばindex.jsの中でimport a from./a.js'の彼のvalueはこのようです.
function(module, exports, require) {
"use strict";
eval("require.r(exports);
var a = require(\"./src/a.js\"); // a require module.exports
var a_default = require.n(a); //
console.log('webpack')");
}
require.rとは、exportで定義された属性を識別するものです.require.nは、require.dを実行してモジュールを取得する方法であり、
require.dは、この関数に'a'を追加し、getter.aにアクセスするときにgetterを実行します.
最後に、このように繰り返して包装して最終的にmodule.exportを生成して戻ってきます.
module.lがtrueを変更すると、このmoduleはすでにパッケージ化されています.最後にmodule.exportsに戻ります.
次の予告:webpack.co.nfig.jsの配置