Runtime tranform/runtime変換器詳細解
6475 ワード
Runtime transform運転時にコンパイルします.
インポートファイルの参照はサポートとして、自動的にスペーサーを追加します.グローバルではなく、現在のコードモジュールに追加します.
このプラグインはlibrary/toolに置くことを勧めています.
たとえば、
なぜそれを使うのですか?
Babelは、一般的な関数に対して非常に小さい補助を使用しています.たとえば、
これは
もう一つの目的は、この変換器があなたのコードのためにサンドボックス環境を作成することです.
変換器
どうやって効果的に仕事ができますか?技術の詳細を見てください.
インストール
注意:生産バージョン(Production)vs開発バージョン(development)依存
ほとんどの場合、開発バージョンとして
次の例を見てください.
使い方
下のコードをあなたの
補助(helpers)
デフォルトの値は
インラインがオンされているかどうかを示すBabel helpers(すなわちBabelまたは環境が本来存在するスペーサーまたはいくつかのオブジェクト方法関数)(
詳細を表示
スペーサー/polyfill
デフォルトの値は、`true'です
内蔵するもの(
再生成/レゲナート
デフォルトの値は
詳細を表示
モジュール名/moduleName
標準値:
例:ゲナート/async方法、関数を使用すると自動的に を呼び出します. ES 6のMapまたは内蔵のものを使用すると自動的に を呼び出します.は、インラインBabel helpersを除去し、 を置換する.
総じて言えば、
再生器の別名はレゲナートaliasingです.
いつでもgenerator関数または非同期関数を使います.
core-jsの別名化/core-js aliasing
内蔵するものを使いたい場合があります.通常はグローバルなスペーサーを使います.
アクセシビリティ名/Helper aliasing
通常Babelは補助をファイルの上部に置いて、繰り返し導入を避けるためによく使われています.場合によっては、これらの補助の体積が大きく、必要でないものもあります.
次のようなプレゼンテーションを行います
インポートファイルの参照はサポートとして、自動的にスペーサーを追加します.グローバルではなく、現在のコードモジュールに追加します.
このプラグインはlibrary/toolに置くことを勧めています.
たとえば、
"foobar".includes("foo")
は、内蔵されたスペーサーを修正するので、使用できないことに注意してください.なぜそれを使うのですか?
Babelは、一般的な関数に対して非常に小さい補助を使用しています.たとえば、
_extend
.デフォルトでは、各参照ファイルに追加されます.このような繰り返しは時にはとても必要ではないです.特にあなたのアプリケーションは多くのファイルに分散されています.これは
transform-runtime
プラグインが発生した理由です.これらのすべての補助金はコンパイル時の重複を避けるためにbabel-runtime
を参照します.runtimeはあなたのbuildにコンパイルします.もう一つの目的は、この変換器があなたのコードのためにサンドボックス環境を作成することです.
babel-polyfill
を使用して内蔵してpromise
、set
、map
のようなオブジェクトまたは機能を提供すると、彼らはグローバル環境を汚染します.一つのアプリケーションやコマンドラインツールでは大丈夫かもしれませんが、もしあなたのコードがライブラリであれば、他の人に配布して使いたいです.使う人は様々な実行環境にいるかもしれませんので、エラーが発生し、実行できません.変換器
transformer
は、これらの内蔵(スペーサー)を別名core-js
に設定するので、require
を使用しないでシームレスに使用することができます.どうやって効果的に仕事ができますか?技術の詳細を見てください.
インストール
注意:生産バージョン(Production)vs開発バージョン(development)依存
ほとんどの場合、開発バージョンとして
babel-plugin-transform-runtime
をインストールする必要があります.npm install --save-dev babel-plugin-transform-runtime
また、babel-runtime
は生産バージョンとして依存している(設定--save)npm install --save babel-runtime
変換器のプラグインは一般的に開発時のみ使用されますが、中の実際のスペーサーコードはあなたがライブラリを配置またはリリースする時に必要です.次の例を見てください.
使い方
.babelrc
を通じて(推奨)下のコードをあなたの
babelrc
ファイルに追加します.
{
"plugins": ["transform-runtime"]
}
{
"plugins": [
["transform-runtime", {
"helpers": false,
"polyfill": false,
"regenerator": true,
"moduleName": "babel-runtime"
}]
]
}
コマンドライン(CLI)でbabel --plugins transform-runtime script.js
Nodeインターフェースを通じて(Node API)require("babel-core").transform("code",{
plugins:["transform-runtime"]
})
オプション/設定補助(helpers)
デフォルトの値は
true
です.インラインがオンされているかどうかを示すBabel helpers(すなわちBabelまたは環境が本来存在するスペーサーまたはいくつかのオブジェクト方法関数)(
clasCallCheck
、extends
、etc)は、モジュール名(moduleName
)を呼び出したときに名前が置き換えられます.詳細を表示
スペーサー/polyfill
デフォルトの値は、`true'です
内蔵するもの(
Promise
、Set
、Map
、tec)を大域汚染のスペーサーでないものに変換するかどうかを示します.詳細を表示再生成/レゲナート
デフォルトの値は
true
です.generator
関数をオンにするかどうかは、全ローカルを汚染しないようにregenerator runtime
を使用するように変換される.詳細を表示
モジュール名/moduleName
標準値:
babel-runtime
補助(内蔵スペーサー)を呼び出してモジュール名/パスを設定します.例:
json
{
"moduleName": "flavortown/runtime"
}
javascript
import extends from 'flavortown/runtime/helpers/extends';
技術詳細/Techical detailruntime
変換器プラグインは主に三つのことをしました.babel-runtime/regenerator
babel-runtime/core-js
babel-runtime/helpers
を使用して総じて言えば、
Promise
、Set
、Symbol
などの内蔵のものを使用してもいいです.シームレスな使用polyfill
のように、Babel特性を使用して、グローバル汚染、極めて高いコードライブラリの適用性がありません.再生器の別名はレゲナートaliasingです.
いつでもgenerator関数または非同期関数を使います.
function* foo(){
}
次のものが生成されます."use strict";
var _marked = [foo].map(regeneratorRuntime.mark);
function foo() {
return regeneratorRuntime.wrap(function foo$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
case "end":
return _context.stop();
}
}, _marked[0], this);
}
これはあまり理想的ではありません.あなたがリゲナートを運転すると、全ローカルが汚染されます.代わりにruntime
変換器が必要です."use strict";
var _regenerator = require("babel-runtime/regenerator");
var _regenerator2 = _interopRequireDefault(_regenerator);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _marked = [foo].map(_regenerator2.default.mark);
function foo() {
return regeneratorRuntime.wrap(function foo$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
case "end":
return _context.stop();
}
}, _marked[0], this);
}
これはregeneratorを使う時に現在のグローバル環境を汚染しないということです.core-jsの別名化/core-js aliasing
内蔵するものを使いたい場合があります.通常はグローバルなスペーサーを使います.
Promise
変換器は次のように変換されます.var sym = Symbol();
var promise = new Promise;
console.log(arr[Symbol.iterator]());
追加"use strict";
var _getIterator2 = require("babel-runtime/core-js/get-iterator");
var _getIterator3 = _interopRequireDefault(_getIterator2);
var _promise = require("babel-runtime/core-js/promise");
var _promise2 = _interopRequireDefault(_promise);
var _symbol = require("babel-runtime/core-js/symbol");
var _symbol2 = _interopRequireDefault(_symbol);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var sym = (0, _symbol2.default)();
var promise = new _promise2.default();
console.log((0, _getIterator3.default)(arr));
これは、スペーサーから来るかそれともローカルから来るかを考慮せずに、シームレスにローカルに内蔵する方法を使用できることを意味します.警告の例としては、例えば「foobar」.includes('foo')は使用できません.アクセシビリティ名/Helper aliasing
通常Babelは補助をファイルの上部に置いて、繰り返し導入を避けるためによく使われています.場合によっては、これらの補助の体積が大きく、必要でないものもあります.
Set
変換器は、すべての補助を一つのモジュールに変換します.次のようなプレゼンテーションを行います
class Person {
}
一般的な転化は、(つまり、ルンムではない):"use strict";
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Person = function Person() {
_classCallCheck(this, Person);
};
Map
変換器は、"use strict";
var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var Person = function Person() {
(0, _classCallCheck3.default)(this, Person);
};