webpack 4学習ノート(二)
31501 ワード
webpack包装各種javascriptファイル
(本文は学習記録を提供するだけで、ほとんどの内容はネットから来る)
一つは、jsファイルとs 6コードを包装します.
1,webpackコマンドはjsファイルを包装します.
Tip:webpack 4.xの前に直接にコマンドラインツールにwebpackコマンドを使用することができます.webpack 4.xの後にwebpack-cliをインストールする必要があります.
webpack--entry--output--modeモード
もっと具体的なパラメータは可能です.webpack--help
説明:
1,設定ファイルを実行して、package.jsonの下の‘scripts’に追加できます.「"build":「webpack--config webpack.co.nfig.js」}で、設定ファイルのデフォルトの名前はwebpack.co fig.jsで、他の名前ならconfigで確認できます.
2,entry対象はwebpackのパッケージの入口ファイルです.webpackは、entryの構成に従って、入口ファイルとすべての依存ファイルを検索して、bundleを構築します.
3,outputオブジェクトはwebpackがどのように出力するかを指示しています.また、どこであなたの「bundle,assetと他のあなたが包装したものやwenbackを使ってロードしたもの」を出力しますか?
3,webpackはbabelに合わせてES 6、7を包装します.
ES 6の普及と心遣いによって、ほとんどの項目でエス6文法が使われます.しかし、ブラウザのサポートは友好的ではないので、ほとんどのブラウザで解析できるようにS 6を降格させる必要があります.バベルはこのような役割をする道具です.
babel-loader:ただお知らせの役割を果たして、babelに仕事が必要だと通知しました.webpackでは、このようにしています.
と言えば
babel-preset-env
まず、歴史背景を紹介して、バベル-preset-envを理解して学習するのに役立ちます.
最初は、開発者が早く新しいJS特性を使うことができるように、BabelチームがBabel-prest-latestを開発しました.このpresetは特別なもので、複数のpresetの集合(es 2015+)であり、ECMA仕様の更新に伴ってその内容をさらに増やす.
例えば、現在(2018.06.02)は、preset 2017、es 1016、es 2015を含む.
来年になると、それが含まれているかもしれないpresetは以下の通りです.2018、ess 2017、ess 2016、ess 2015.
時間が経つにつれて、Babel-prester-latestに含まれるプラグインはますます多くなりました.これは以下の問題をもたらしました.にロードされたプラグインはますます多くなり、コンパイル速度はますます遅くなります. は、ユーザブラウザのアップグレードに伴い、ECMA仕様のサポートが徐々に改善され、低バージョン仕様へのコンパイルの必要性が減少している(例えば、ES 6−>ES 5). 上記の問題の存在のために、Babel公式はBabel-prest-envプラグインを発売しました.開発者の設定に従って、必要に応じてプラグインをロードすることができます.設定項目は大体含まれています.は、node、ブラウザなどのサポートが必要です. はサポートされているプラットフォームのバージョンを必要とします.例えばサポート[email protected]など デフォルトの設定の場合は、babel-prest-latestと同等で、ess 2015から始まるすべてのprestをロードします.
設定ファイル.babelrcは以下の通り、現在はデフォルトの設定です.
babel-polypill、babel-runtime
Babel-polypillはes 6の新しい方法の解決策を提供していますが、使う時は入口のファイル全体に導入されて、グローバル変数を汚染するので、Babel-runtimeが必要です.このように大域的に導入しないでください.グローバル変数の汚染を引き起こします.
転載先:https://www.cnblogs.com/panhe-xue/p/10269666.html
(本文は学習記録を提供するだけで、ほとんどの内容はネットから来る)
一つは、jsファイルとs 6コードを包装します.
1,webpackコマンドはjsファイルを包装します.
Tip:webpack 4.xの前に直接にコマンドラインツールにwebpackコマンドを使用することができます.webpack 4.xの後にwebpack-cliをインストールする必要があります.
1 webpack --entry .\src\app.js --output ./src/b.js --mode development
webpack--entry--output--modeモード
もっと具体的なパラメータは可能です.webpack--help
Config options:
--config Path to the config file
[string] [default: webpack.config.js or webpackfile.js]
--config-register, -r Preload one or more modules before loading the webpack
configuration [array] [default: module id or path]
--config-name Name of the config to use [string]
--env Environment passed to the config, when it is a function
--mode Enable production optimizations or development hints.
[choices: "development", "production", "none"]
Basic options:
--context The base directory (absolute path!) for resolving the `entry`
option. If `output.pathinfo` is set, the included pathinfo is
shortened to this directory.
[string] [default: The current directory]
--entry The entry point(s) of the compilation. [string]
--watch, -w Enter watch mode, which rebuilds on file change. [boolean]
--debug Switch loaders to debug mode [boolean]
--devtool A developer tool to enhance debugging. [string]
-d shortcut for --debug --devtool eval-cheap-module-source-map
--output-pathinfo [boolean]
-p shortcut for --optimize-minimize --define
process.env.NODE_ENV="production" [boolean]
--progress Print compilation progress in percentage [boolean]
Module options:
--module-bind Bind an extension to a loader [string]
--module-bind-post Bind an extension to a post loader [string]
--module-bind-pre Bind an extension to a pre loader [string]
Output options:
--output, -o The output path and file for compilation assets
--output-path The output directory as **absolute path**
(required).
[string] [default: The current directory]
--output-filename Specifies the name of each output file on disk.
You must **not** specify an absolute path here!
The `output.path` option determines the location
on disk the files are written to, filename is
used solely for naming the individual files.
[string] [default: [name].js]
--output-chunk-filename The filename of non-entry chunks as relative
path inside the `output.path` directory.
[string] [default: filename with [id] instead of [name] or [id] prefixed]
--output-source-map-filename The filename of the SourceMaps for the
JavaScript files. They are inside the
`output.path` directory. [string]
--output-public-path The `publicPath` specifies the public URL
address of the output files when referenced in a
browser. [string]
--output-jsonp-function The JSONP function used by webpack for async
loading of chunks. [string]
--output-pathinfo Include comments with information about the
modules. [boolean]
--output-library Expose the exports of the entry point as library
[array]
--output-library-target Type of library
[string] [choices: "var", "assign", "this", "window", "self", "global",
"commonjs", "commonjs2", "commonjs-module", "amd", "umd", "umd2", "jsonp"]
Advanced options:
--records-input-path Store compiler state to a json file. [string]
--records-output-path Load compiler state from a json file. [string]
--records-path Store/Load compiler state from/to a json file. This
will result in persistent ids of modules and
chunks. An absolute path is expected. `recordsPath`
is used for `recordsInputPath` and
`recordsOutputPath` if they left undefined.[string]
--define Define any free var in the bundle [string]
--target Environment to build for [string]
--cache Cache generated modules and chunks to improve
performance for multiple incremental builds.
[boolean] [default: It's enabled by default when watching]
--watch-stdin, --stdin Stop watching when stdin stream has ended [boolean]
--watch-aggregate-timeout Delay the rebuilt after the first change. Value is
a time in ms. [number]
--watch-poll Enable polling mode for watching [string]
--hot Enables Hot Module Replacement [boolean]
--prefetch Prefetch this request (Example: --prefetch
./file.js) [string]
--provide Provide these modules as free vars in all modules
(Example: --provide jQuery=jquery) [string]
--labeled-modules Enables labeled modules [boolean]
--plugin Load this plugin [string]
--bail Report the first error as a hard error instead of
tolerating it. [boolean] [default: null]
--profile Capture timing information for each module.
[boolean] [default: null]
Resolving options:
--resolve-alias Redirect module requests [string]
--resolve-extensions Redirect module requests [array]
--resolve-loader-alias Setup a loader alias for resolving [string]
Optimizing options:
--optimize-max-chunks Try to keep the chunk count below a limit
--optimize-min-chunk-size Minimal size for the created chunk
--optimize-minimize Enable minimizing the output. Uses
optimization.minimizer. [boolean]
Stats options:
--color, --colors Force colors on the console
[boolean] [default: (supports-color)]
--no-color, --no-colors Force no colors on the console [boolean]
--sort-modules-by Sorts the modules list by property in module
[string]
--sort-chunks-by Sorts the chunks list by property in chunk
[string]
--sort-assets-by Sorts the assets list by property in asset
[string]
--hide-modules Hides info about modules [boolean]
--display-exclude Exclude modules in the output [string]
--display-modules Display even excluded modules in the output
[boolean]
--display-max-modules Sets the maximum number of visible modules in
output [number]
--display-chunks Display chunks in the output [boolean]
--display-entrypoints Display entry points in the output [boolean]
--display-origins Display origins of chunks in the output
[boolean]
--display-cached Display also cached modules in the output
[boolean]
--display-cached-assets Display also cached assets in the output
[boolean]
--display-reasons Display reasons about module inclusion in the
output [boolean]
--display-depth Display distance from entry point for each
module [boolean]
--display-used-exports Display information about used exports in
modules (Tree Shaking) [boolean]
--display-provided-exports Display information about exports provided
from modules [boolean]
--display-optimization-bailout Display information about why optimization
bailed out for modules [boolean]
--display-error-details Display details about errors [boolean]
--display Select display preset
[string] [choices: "", "verbose", "detailed", "normal", "minimal",
"errors-only", "none"]
--verbose Show more details [boolean]
--info-verbosity Controls the output of lifecycle messaging
e.g. Started watching files...
[string] [choices: "none", "info", "verbose"] [default: "info"]
--build-delimiter Display custom text after build output[string]
2,プロファイルで包装します.const path = require('path');
module.exports = {
mode: "production", // "production" | "development" | "none" // Chosen mode tells webpack to use its built-in optimizations accordingly.
entry: "./app/entry", // string | object | array //
//entry: ["./app/entry1", "./app/entry2"]
//entry: {
// a: "./app/entry-a",
// b: ["./app/entry-b", "./app/entry-b"]
// }
// webpack
output: {
// webpack
path: path.resolve(__dirname, "dist"), // string
//
// ( Node.js path )
filename: "bundle.js", // string // 「 (entry chunk)」 ( ?)
publicPath: "/assets/", // string // ,url HTML
library: "MyLibrary", // string,
// (exported library)
libraryTarget: "umd", // // (exported library)
/* ( ) */ },
module: {
//
rules: [
// ( loader、 )
{
test: /\.jsx?$/,
include: [
path.resolve(__dirname, "app")
],
exclude: [
path.resolve(__dirname, "app/demo-files")
],
// ,
// test include ,
// exclude ( test include)
// :
// - test
// - include exclude
// - exclude, include
issuer: { test, include, exclude },
// issuer ( )
enforce: "pre",
enforce: "post",
// , ( )
loader: "babel-loader",
// loader,
// ,`-loader` webpack 2
// webpack 1 。
options: {
presets: ["es2015"]
},
// loader
},
{
test: /\.html$/,
test: "\.html$"
use: [
// loader
"htmllint-loader",
{
loader: "html-loader",
options: {
/* ... */
}
}
]
},
{ oneOf: [ /* rules */ ] },
//
{ rules: [ /* rules */ ] },
// ( )
{ resource: { and: [ /* */ ] } },
//
{ resource: { or: [ /* */ ] } },
{ resource: [ /* */ ] },
// ( )
{ resource: { not: /* */ } }
//
],
/* ( ) */ },
resolve: {
//
// ( loader )
modules: [
"node_modules",
path.resolve(__dirname, "app")
],
//
extensions: [".js", ".json", ".jsx", ".css"],
//
alias: {
//
"module": "new-module",
// :"module" -> "new-module" "module/path/file" -> "new-module/path/file"
"only-module$": "new-module",
// "only-module" -> "new-module", "only-module/path/file" -> "new-module/path/file"
"module": path.resolve(__dirname, "app/third/module.js"),
// "module" -> "./app/third/module.js" "module/file"
//
},
/* ( ) */
/* ( ) */ },
performance: {
hints: "warning", // maxAssetSize: 200000, // ( )
maxEntrypointSize: 400000, // ( )
assetFilter: function(assetFilename) {
//
return assetFilename.endsWith('.css') || assetFilename.endsWith('.js');
}
},
devtool: "source-map", // enum // (browser devtools) (meta info)
// `source-map' 。
context: __dirname, // string( !)
// webpack
// entry module.rules.loader
//
target: "web", // // (bundle)
// (chunk loading behavior) (available module)
externals: ["react", /^@angular\//], // / ,
stats: "errors-only", // bundle
devServer: {
proxy: { // proxy URLs to backend development server
'/api': 'http://localhost:3000'
},
contentBase: path.join(__dirname, 'public'), // boolean | string | array, static file location
compress: true, // enable gzip compression
historyApiFallback: true, // true for index.html upon 404, object for multiple paths
hot: true, // hot module replacement. Depends on HotModuleReplacementPlugin
https: false, // true for self-signed, object for cert authority
noInfo: true, // only errors & warns on hot reload
// ...
},
plugins: [
// ...
],
//
/* ( ) */}
説明:
1,設定ファイルを実行して、package.jsonの下の‘scripts’に追加できます.「"build":「webpack--config webpack.co.nfig.js」}で、設定ファイルのデフォルトの名前はwebpack.co fig.jsで、他の名前ならconfigで確認できます.
2,entry対象はwebpackのパッケージの入口ファイルです.webpackは、entryの構成に従って、入口ファイルとすべての依存ファイルを検索して、bundleを構築します.
3,outputオブジェクトはwebpackがどのように出力するかを指示しています.また、どこであなたの「bundle,assetと他のあなたが包装したものやwenbackを使ってロードしたもの」を出力しますか?
3,webpackはbabelに合わせてES 6、7を包装します.
ES 6の普及と心遣いによって、ほとんどの項目でエス6文法が使われます.しかし、ブラウザのサポートは友好的ではないので、ほとんどのブラウザで解析できるようにS 6を降格させる必要があります.バベルはこのような役割をする道具です.
babel-loader:ただお知らせの役割を果たして、babelに仕事が必要だと通知しました.webpackでは、このようにしています.
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: { // , ‘.babelrc’
presets: ['@babel/preset-env'],// babel
plugin: ['@babel/plugin-proposal-object-rest-spread'] //
}
}
}
}
babel-coreと言えば
babel-loader
webpackにjsファイルのコード互換性をコンパイルしたいと伝えました.それではwebpackは次はbabelを探します.bableの入り口は babel-core
,それを通して、webpackは各种babelのappiを使うことができます.babel-preset-env
まず、歴史背景を紹介して、バベル-preset-envを理解して学習するのに役立ちます.
最初は、開発者が早く新しいJS特性を使うことができるように、BabelチームがBabel-prest-latestを開発しました.このpresetは特別なもので、複数のpresetの集合(es 2015+)であり、ECMA仕様の更新に伴ってその内容をさらに増やす.
例えば、現在(2018.06.02)は、preset 2017、es 1016、es 2015を含む.
来年になると、それが含まれているかもしれないpresetは以下の通りです.2018、ess 2017、ess 2016、ess 2015.
時間が経つにつれて、Babel-prester-latestに含まれるプラグインはますます多くなりました.これは以下の問題をもたらしました.
設定ファイル.babelrcは以下の通り、現在はデフォルトの設定です.
{
"presets": [ "env" ]
}
同時にnodeとブラウザのバージョンに対して異なる構成を行うことができます.例えば、IE 8+、chrome 2+をサポートする必要があります.{
"presets": [
["env", {
"targets": {
"browsers": [ "ie >= 8", "chrome >= 62" ]
}
}]
]
}
プロビジョニングはES 6文法のみをあなたの指定したESバージョンの文法にコンパイルすることができます. Array.from
このようなAPIは彼には何もできません.じゃ、どうすればいいですか?babel-polypill、babel-runtime
Babel-polypillはes 6の新しい方法の解決策を提供していますが、使う時は入口のファイル全体に導入されて、グローバル変数を汚染するので、Babel-runtimeが必要です.このように大域的に導入しないでください.グローバル変数の汚染を引き起こします.
{
"presets": [
["env", {
"targets": {
"browsers": [ "ie >= 8", "chrome >= 62" ]
}
}]
],
"plugins": ["transform-runtime"] //
}
転載先:https://www.cnblogs.com/panhe-xue/p/10269666.html