2016-03-28 9 views
0

入力ファイルエキストラ定義と変換-es2015-モジュール - AMD作男・バベル

import Logger from "logger"; 
export default class Greeter { 
    constructor(name) { 
     this.name = name || ''; 
     console.log('Hello', name); 
    } 

    notify() { 
     console.log('It is my duty to inform you that this JS is ES6!'); 
    } 

    getName() { 
     Logger.log('Called getName'); 

     return this.name; 
    } 
} 

出力ファイルを経由して、イサキ

define([], function() { 
    define(['exports', 'logger'], function (exports, _logger) { 
     'use strict'; 

     Object.defineProperty(exports, "__esModule", { 
      value: true 
     }); 

     var _logger2 = _interopRequireDefault(_logger); 

     function _interopRequireDefault(obj) { 
      return obj && obj.__esModule ? obj : { 
       default: obj 
      }; 
     } 

     function _classCallCheck(instance, Constructor) { 
      if (!(instance instanceof Constructor)) { 
       throw new TypeError("Cannot call a class as a function"); 
      } 
     } 

     var _createClass = function() { 
      function defineProperties(target, props) { 
       for (var i = 0; i < props.length; i++) { 
        var descriptor = props[i]; 
        descriptor.enumerable = descriptor.enumerable || false; 
        descriptor.configurable = true; 
        if ("value" in descriptor) descriptor.writable = true; 
        Object.defineProperty(target, descriptor.key, descriptor); 
       } 
      } 

      return function (Constructor, protoProps, staticProps) { 
       if (protoProps) defineProperties(Constructor.prototype, protoProps); 
       if (staticProps) defineProperties(Constructor, staticProps); 
       return Constructor; 
      }; 
     }(); 

     var Greeter = function() { 
      function Greeter(name) { 
       _classCallCheck(this, Greeter); 

       this.name = name || ''; 
       console.log('Hello', name); 
      } 

      _createClass(Greeter, [{ 
       key: 'notify', 
       value: function notify() { 
        console.log('It is my duty to inform you that this JS is ES6!'); 
       } 
      }, { 
       key: 'getName', 
       value: function getName() { 
        _logger2.default.log('Called getName'); 

        return this.name; 
       } 
      }]); 

      return Greeter; 
     }(); 

     exports.default = Greeter; 
    }); 
}); 

出力ファイルを経由して、CLI

経由
define(['exports', 'logger'], function (exports, _logger) { 
    'use strict'; 

    Object.defineProperty(exports, "__esModule", { 
     value: true 
    }); 

    var _logger2 = _interopRequireDefault(_logger); 

    function _interopRequireDefault(obj) { 
     return obj && obj.__esModule ? obj : { 
      default: obj 
     }; 
    } 

    function _classCallCheck(instance, Constructor) { 
     if (!(instance instanceof Constructor)) { 
      throw new TypeError("Cannot call a class as a function"); 
     } 
    } 

    var _createClass = function() { 
     function defineProperties(target, props) { 
      for (var i = 0; i < props.length; i++) { 
       var descriptor = props[i]; 
       descriptor.enumerable = descriptor.enumerable || false; 
       descriptor.configurable = true; 
       if ("value" in descriptor) descriptor.writable = true; 
       Object.defineProperty(target, descriptor.key, descriptor); 
      } 
     } 

     return function (Constructor, protoProps, staticProps) { 
      if (protoProps) defineProperties(Constructor.prototype, protoProps); 
      if (staticProps) defineProperties(Constructor, staticProps); 
      return Constructor; 
     }; 
    }(); 

    var Greeter = function() { 
     function Greeter(name) { 
      _classCallCheck(this, Greeter); 

      this.name = name || ''; 
      console.log('Hello', name); 
     } 

     _createClass(Greeter, [{ 
      key: 'notify', 
      value: function notify() { 
       console.log('It is my duty to inform you that this JS is ES6!'); 
      } 
     }, { 
      key: 'getName', 
      value: function getName() { 
       _logger2.default.log('Called getName'); 

       return this.name; 
      } 
     }]); 

     return Greeter; 
    }(); 

    exports.default = Greeter; 
}); 

{ 
    "presets": ["es2015"], 
    "plugins": ["transform-es2015-modules-amd"] 
} 

.babelrc私はうなり声-バベルプラグイン経由で変換を行うときに、余分なdefine()が私のES5ソースに追加されているこの奇妙な行動に実行していますよ。私はレポをフォークし、babel-coreとbabel-preset-es2015を最新バージョンに更新しましたが、それは助けになりませんでした。

これを変換するにはbabel.transformFileSyncのように見えます。 babel-cliパッケージでは、babel.tranformのように見えます。しかし、babel.transformFileSyncはファイルを読み込み、内容をbabel.tranformに渡します。

私はいくつかの小さな設定オプションなどをどこかに逃しているように感じます。誰かが私が逃しているものを見ることができますか

答えて

1

私の問題が見つかりました。私のGruntfile.jsでは、私は.babelrcファイルのJSON文字列を読んで、オプションオブジェクトに渡していました。これは二重定義の原因となっているようです。一度私は問題が解決したことを削除しました。

なぜこの動作を引き起こしていたのか分かりませんが、現在は対応しています。

+0

なぜ '.babelrc'を読んでいますか?これは、あなたのロジックとBabelの両方でプラグインが読み込まれることを意味します。これは、プラグインが2回指定されることを意味します。それは変換を2回実行し、このように2重のネストを引き起こします。 – loganfsmyth

+0

@Jason - あなたはちょうど私のベーコンを救った!私の場合は、追加のBabel設定情報がpackage.json内にあり、Gulpを使用しています。しかし、物事は同じ混乱する方法で動作します。 –

関連する問題