babel 7実践
先日使用しました
presets
polyfill
useBuiltIns
そう、この新しいコンフィギュレーションアイテムを使えばオンデマンドロードが可能
false
値が
entry
usage
値が
コマンドラインにロード項目を印刷する必要がある場合は、
plugin-transform-runtime
たとえば
コンパイル後:
コンパイル出力のコードには、
このとき、上のコードをコンパイルすると、次のような結果が得られます.
この場合は直接
使用他人に配布するためのツールやライブラリには、 そして
自分のアプリケーションについては、導入
まとめ
以上述べたように,現在では
2.
3.
他の人に配布するツールまたはライブラリは、次の構成を使用できます.
babel7
、特にメモをとります.原文はGitHubに発表された.presets
babel7
では、以前の段階的な提案は廃棄されており、現在は一括して使用されている@babel/preset-env
.だから、ここは少し面倒を省きました.webpack
配置中preset-env
協力babel-loader
変換可能ES2015+
構文です.また、公式にはtargets
ターゲットブラウザを設定して互換性のある機能を決定することを推奨しています.例を挙げます.module.exports = {
presets: [
[
'@babel/preset-env',
{
targets: {
ie: "11"
}
}
]
]
}
polyfill
polyfill
これまでは新しいapi
機能を導入するために使用されていた.私たちがよく使うpromise
、Object.assign
などです.babel6
およびそれまでは、入口にpolyfill
を導入するだけでよい.しかし、これも問題をもたらし、一度に全体polyfill
をロードし、非常に冗長である.使用したbabel7
シンプルな構成でオンデマンドロードの目的を達成でき、手動で導入する必要もなくなりましたpolyfill
.useBuiltIns
そう、この新しいコンフィギュレーションアイテムを使えばオンデマンドロードが可能
polyfill
.次の3つの値を指定できます.false
値が
false
の場合は、無駄に相当しますが、その場合は手動で全てのpolyfill
を導入しなければなりません.entry
entry
を使用する場合も、手動でpolyfill
、すなわちimport '@babel/polyfill';
を導入する必要があり、同時に全てのpolyfill
を導入している.この配置項目は、なんだか役に立たないので、お兄さんが知っていればコメントエリアで一緒に議論してもいいです.usage
値が
usage
の場合、導入不要polyfill
、babel
必要な機能が自動的にオンデマンドでロードされます.{
\\...
useBuiltIns: 'usage'
}
コマンドラインにロード項目を印刷する必要がある場合は、
debug
:{
\\...
useBuiltIns: 'usage',
dubug: true
}
plugin-transform-runtime
たとえば
class( )
を使用する場合、babel
その前にヘルプ関数が追加されます.ソースコード:// source code
class Test {}
コンパイル後:
"use strict";
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Test = function Test() {
_classCallCheck(this, Test);
};
コンパイル出力のコードには、
helper
関数が直接コードに埋め込まれていることがわかります.これしかないjs
ファイルがこれを使っているhelper
なら問題ありません.しかし考えてみると、スクリプトファイルがたくさんあれば、どれもclass
・、babel
しかし、あなたがこんなに多くても、コンパイルされたファイルごとに同じhelper
関数が含まれているので、冗長になります.幸いなことに、私たちは@babel/plugin-transform-runtime
と@babel/runtime
を使ってこの問題を解決することができます.次の構成を追加します.plugins: [
'@babel/plugin-transform-runtime'
]
このとき、上のコードをコンパイルすると、次のような結果が得られます.
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var Test = function Test() {
(0, _classCallCheck2.default)(this, Test);
};
この場合は直接
helper
関数をコードに埋め込むのではなくrequire
共通ロードhelper
を使用します.使用
polyfill
やはりruntime
@babel/runtime
が適しています.@babel/polyfill
全体の環境を汚染するため、他の人があなたの倉庫に導入すると不要な汚染をもたらす可能性があります.@babel/runtime
・・"foobar".includes("foo")
など、いくつかの例示的な方法を提供することができない.また、自分で手動で導入する必要があります.自分のアプリケーションについては、導入
@babel/polyfill
より良く、より包括的な機能を提供し、グローバル汚染を心配する必要はありません.しかし、上記のように、いくつかのhelper
関数は、@babel/plugin-transform-runtime
プラグインを使用しないと冗長コードが導入されます.この両者を一緒に使用する場合、plugin-transform-runtime
を構成しなければ重複機能の導入はありません.まとめ
以上述べたように,現在では
babel7
とwebpack
の実践を終了とする.1.依存の追加cnpm i --save-dev babel-loader @babel/core @babel/preset-env @babel/plugin-transform-runtime
// &
cnpm i --save @babel/polyfill @babel/runtime
2.
webpack
配置module.exports = {
// ...
module: {
rules: [
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/
}
]
}
};
3.
babel
以下は自分のアプリケーション項目での構成です.// babel.config.js
module.exports = {
presets: [
[
'@babel/preset-env',
{
useBuiltIns: 'usage',
targets: {
ie: 10 //
},
debug: true,
// corejs ,corejs 2 3
// core-js, cnpm i core-js@2 --save
corejs: 2
}
]
],
plugins: [
'@babel/plugin-transform-runtime'
]
};
他の人に配布するツールまたはライブラリは、次の構成を使用できます.
// babel.config.js
module.exports = {
presets: [
'@babel/preset-env'
],
plugins: [
[
'@babel/plugin-transform-runtime',
{
corejs: 2
// ...
}
]
]
};