最新版本的webpack不支持IE8。我试过1.12.12(我认为它是支持IE8的最后一个版本),但仍然从不可调整的Object.defineProperty
中获得错误。
https://github.com/webpack/webpack/issues/2085
支持IE8的最后一个webpack版本是什么?它是否适用于ES6模块?
webpack.config.js:
var webpack = require("webpack");
var es3ifyPlugin = require('es3ify-webpack-plugin');
var productionPlugin = new webpack.DefinePlugin({
'process.env': {
'NODE_ENV': JSON.stringify('production')
}
});
var devPlugin = new webpack.DefinePlugin({
"process.env": {
NODE_ENV: JSON.stringify("dev")
}
});
module.exports = {
entry: {
assessment: "./src/aaa/app.js"
},
//devtool: "source-map",
output: {
path: "../AAA/wwwroot/js",
filename: "[name].bundle.js",
publicPath: "/"
},
resolve: {
extensions: ["", ".js"]
},
module: {
preLoaders: [
{
test: /\.js$/,
loader: "eslint-loader",
exclude: "node_modules"
}
],
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader"
},
{
// todo: move less compiling to web project
test: /\.less$/,
loader: "style-loader!css-loader!less-loader",
exclude: "node_modules"
},
]
},
devServer: {
historyApiFallback: true,
inline: true,
proxy: {
"/api": {
"target": {
host: "localhost",
protocol: "http:",
port: "58211",
},
changeOrigin: true,
pathRewrite: { "^/api": "" }
}
},
publicPath: "/assets/"
},
plugins: [
new es3ifyPlugin(),
new webpack.optimize.CommonsChunkPlugin({
name: "vendor",
minChunks: isExternal
}),
productionPlugin
//devPlugin
]
}
function isExternal(module) {
var userRequest = module.userRequest;
if (typeof userRequest !== "string") {
return false;
}
return userRequest.indexOf("node_modules") >= 0;
}
透明代码如下所示:
exports.test = '123';
webpackJsonp([1, 0], [
function (module, exports, __webpack_require__) {
'use strict';
var _imported = __webpack_require__(1);
alert('test ' + _imported.test);
function(module, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var test = exports.test = 123;
}
]);
答案 0 :(得分:2)
问题是babel默认情况下如何翻译ES2015代码。在默认(非松散)模式下uses Object.defineProperty
,但可以使用松散模式进行配置。
// webpack.config.js
module: {
loaders: [
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/,
query: {
presets: [ ['es2015', {"loose": true}] ]
}
}
]
}
这导致以下编译代码:
/* 0 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var _imported = __webpack_require__(1);
var _imported2 = _interopRequireDefault(_imported);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
console.log('test ' + _imported2.default);
/***/ },
/* 1 */
/***/ function(module, exports) {
"use strict";
exports.__esModule = true;
var test = 123;
exports.default = test;
/***/ }
/******/ ])
从讨论中解决了您的问题:
1.13.0于2016年4月15日发布。所以看来这应该有效。您确定自己在自己的应用程序代码中没有使用getter / setter吗?也许您可以使用hello world示例代码创建一个超级简单的示例,并尝试使用1.13版本创建构建。这样创建的代码不应该使用Object.defineProperty
我猜。