如何将Webpack的引导程序与具有Object.defineProperty的IE8集成?

时间:2017-04-23 07:24:30

标签: javascript webpack internet-explorer-8 babeljs

基本上,Webpack在bundle的开头添加了一些代码:

oTable.bindAggregation("items", {
    path: "/BusinessPartners('BusinessPartnerId')/SalesOrders",
    template: oTemplate,
    parameters: {
       expand: "SalesOrderItems"
    }
});

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 /******/ }); /******/ } /******/ }; 未定义)。我使用babel Object.defineProperty预设为加载器,这样它就不会成为问题(如果我想在其他地方使用它,它会为它生成存根):

es2015-loose

我的所有代码(重现此问题的特殊存储库)是here, pointing to particular commit。您可以通过运行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); 断言来检查这一点。

1 个答案:

答案 0 :(得分:0)

Webpack支持ES5及更高版本。但是,IE8运行ES3,因此您需要一个polyfill才能运行ES5代码。您可以将ES5填充程序加载器添加到Webpack配置中。此外,您还应该将NODE_ENV设置为Production,然后它不会为空描述符抛出错误。

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

所以,这就是我们如何克服这个错误,但问题仍然存在,如果描述符不为空,会发生什么?即,如果未提供值,则不提供get和set,但是可以配置,可枚举和可写?答案是,它在IE8中无声地失败(这是记录的行为)。