2017-04-23 121 views
0

本質的WebPack在所述束的開始處添加一些代碼:如何將Webpack的bootstrap與具有Object.defineProperty的IE8集成?

/******/ // 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 
/******/   }); 
/******/  } 
/******/ }; 

這是造成與IE8錯誤(Object.defineProperty是未定義)。我使用的巴貝爾es2015-loose預設的裝載機,以便它不應該是一個問題(這是產生存根它,如果我想使用它在其他地方):

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

我的所有代碼(特殊倉庫轉載本文問題)是here, pointing to particular commit。您可以通過運行validate.sh斷言來檢查。

回答

0

Webpack支持ES5及以上版本。但是,IE8運行ES3,因此您需要一個polyfill來運行ES5代碼。您可以將ES5 shim加載器添加到您的Webpack配置中。此外,你還應該將NODE_ENV設置爲生產,然後它不會爲空描述符拋出錯誤。

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

所以,這是我們如何能夠克服這個錯誤,但問題依然存在,如果描述符不爲空,會發生什麼?即,如果未提供值,則get和set不會提供,但可配置,可枚舉和可寫。答案是,它在IE8中默默無聞(這是記錄的行爲)。