2017-09-27 4 views
2

Babelと彼のプラグインのドキュメントをよく読んで、私はlooseオプションを満たしています。私はそれが何であるかを理解するのに十分な例を見ていない。Babeljsの「緩い」とは何ですか?

preset-es2015の例を示します。

緩い

booleanfalseデフォルト。

が許可するこのプリセット内のプラグインに対して「緩やかな」変換を有効にします。

誰かがこのオプションの詳細について説明できますか?

答えて

1

This articleは現時点でウェブ上で最も優れた例です。この記事を読むことをお勧めします。プラグインの例を説明しましたbabel-plugin-transform-es2015-class

以下、別のプラグインbabel-plugin-transform-es2015-for-ofの例を示します。

ソースコード:

for (var i of foo) {} 

loose: falseは - コードチェックの多い、最も厳格な標準との互換性が得られる生成しました。

var _iteratorNormalCompletion = true; 
var _didIteratorError = false; 
var _iteratorError = undefined; 

try { 
    for (var _iterator = foo[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { 
    var i = _step.value; 
    } 
} catch (err) { 
    _didIteratorError = true; 
    _iteratorError = err; 
} finally { 
    try { 
    if (!_iteratorNormalCompletion && _iterator.return) { 
     _iterator.return(); 
    } 
    } finally { 
    if (_didIteratorError) { 
     throw _iteratorError; 
    } 
    } 
} 

loose: true - 軽量バージョン、以下の仕様に従ったが、同じ結果をもたらします。

for (var _iterator = foo, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { 
    var _ref; 

    if (_isArray) { 
    if (_i >= _iterator.length) break; 
    _ref = _iterator[_i++]; 
    } else { 
    _i = _iterator.next(); 
    if (_i.done) break; 
    _ref = _i.value; 
    } 

    var i = _ref; 
} 
関連する問題