2017-04-23 17 views
0

基本的にWebPACKのは、バンドルの最初にいくつかのコードを追加します。WebpackのブートストラップとObject.definePropertyを持つIE8を統合するには?

IE8( Object.definePropertyが未定義である)でエラーの原因となっている
/******/ // define getter function for harmony exports 
/******/ __webpack_require__.d = function(exports, name, getter) { 
/******/  if(!__webpack_require__.o(exports, name)) { 
/******/   Object.defineProperty(exports, name, { 
/******/    configurable: false, 
/******/    enumerable: true, 
/******/    get: getter 
/******/   }); 
/******/  } 
/******/ }; 

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } 

var obj = (_obj = {}, _defineProperty(_obj, "x" + foo, "heh"), _defineProperty(_obj, "y" + bar, "noo"), _defineProperty(_obj, "foo", "foo"), _defineProperty(_obj, "bar", "bar"), _obj); 

マイこれを再現するために、すべてのコード(特別なリポジトリを:それは問題(私はどこかにそれを使用したい場合は、それはそれのためのスタブを生成している)であってはならないように、私はローダとしてバベルes2015-looseプリセットを使用しています問題)はhere, pointing to particular commitです。これを確認するには、validate.shアサーションを実行します。

答えて

0

WebpackサポートES5以上。しかし、IE8はES3を実行するので、ES5コードを実行するにはポリフィルが必要です。 Webpack設定にES5シムローダーを追加することができます。さらに、NODE_ENVをProductionに設定する必要があります。空のディスクリプタではエラーは発生しません。

Object.defineProperty({},'a',{}); 

ので、これは我々がこのエラーを克服することができる方法であるが、問題は、記述子が空でない場合はどうするか、残っていますか?つまり、値が指定されていない場合、getおよびsetは提供されませんが、設定可能、列挙可能、および書き込み可能です。答えは、IE8で黙って失敗します(これは文書化された動作です)。

関連する問題