2017-04-23 4 views
0

Essentiellement Webpack ajoute un code au début du paquet:Comment intégrer le bootstrap de Webpack avec IE8 qui a 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 
/******/   }); 
/******/  } 
/******/ }; 

Ce qui provoque une erreur avec IE8 (Object.defineProperty est pas défini). J'utilise babel es2015-loose prédéfini comme chargeur de sorte qu'il ne devrait pas être un problème (il génère stub si je veux l'utiliser ailleurs):

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); 

Mon tout le code (dépôt spécial pour reproduire ce problème) est here, pointing to particular commit. Vous pouvez vérifier cela en exécutant l'assertion validate.sh.

Répondre

0

Webpack support ES5 et supérieur. IE8, cependant, exécute ES3, donc vous aurez besoin d'un polyfill pour pouvoir exécuter le code ES5. Vous pouvez ajouter le chargeur shim ES5 à votre configuration Webpack. De plus, vous devez également définir NODE_ENV sur Production, puis ne pas lancer d'erreur pour un descripteur vide.

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

Alors, voici comment nous pouvons surmonter cette erreur, mais la question reste, ce qui devrait se produire si le descripteur est pas vide? c'est-à-dire, si la valeur n'est pas fournie, get et set ne sont pas fournis, mais configurable, énumérable et accessible en écriture sont présents? et la réponse est, il échoue silencieusement dans IE8 (qui est le comportement documenté).