Мой конфиг babel + webpack работает нормально, но полученный пакет не работает в IE11, поскольку он содержит const
объявлений. Я думал, что с предустановкой es2015
было достаточно, чтобы это исправить? Запуск $(npm bin)/babel test/some-es2015.js
производит строгий код ES5.1, поэтому Babel, похоже, работает, но фактический код, который работает в IE11, находится в модулях, импортированных из node_modules
.
При подборе значения 'const '
в моем результирующем пакете я получаю некоторые строки, подобные этой (оценка происходит из-за сопоставления источника eval, кстати):
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst validator = __webpack_require__(/*! validator */ \"./node_modules/tcomb-additional-types/node_modules/validator/index.js\");\nconst t = __webpack_require__(/*! tcomb */ \"./node_modules/tcomb/index.js\");\nconst IP = t.refinement(t.String, validator.isIP);\nexports.IP = IP;\nexports.default = IP;\n//# sourceMappingURL=ip.js.map\n\n//# sourceURL=webpack:///./node_modules/tcomb-additional-types/lib/string/ip.js?");
Важная часть, на которую следует обратить внимание, это такие вещи, как const validator =
. Это не синтаксис ES5.1. Мой собственный код, кажется, был перенесен на ES5 просто отлично. Я могу видеть этот файл в /node_modules/tcomb-additional-types/lib/string/ip.js
, где они используют const
, так что это не добавление Babel const
s, а источник, содержащий их. Большинство других пакетов - ES5.
До сих пор я обнаружил, что большинство const
с material-ui
и tcomb-additional-types
.
Babel .babelrc:
{
"compact": false,
"presets": [
"es2015",
"es2017"
],
"plugins": [
["transform-runtime", {
"polyfill": false,
"regenerator": true
}],
"transform-class-properties",
"transform-react-jsx",
"transform-object-rest-spread"
]
}
Конфигурация веб-пакета:
const path = require('path');
const CopyWebpackPlugin = require('copy-webpack-plugin');
/** @returns {String} an absolute path */
function toRoot(rootRelativeDir) {
return path.resolve(__dirname, '..', rootRelativeDir);
}
module.exports = {
entry: ['./src/app.js', './styles/flex.less'].map(toRoot),
output: {
filename: 'bundle.js',
path: toRoot('.webpack/dist')
},
resolve: {
extensions: ['.js', '.jsx'],
alias: {}
},
module: {
rules: [
{
test: /\.jsx?$/,
exclude: /node_modules/,
use: [
{
loader: 'babel-loader',
options: {
/* General options are read using .babelrc - only webpack loader specific here */
cacheDirectory: toRoot('.webpack/babel_cache')
}
}
]
}
]
},
plugins: [new CopyWebpackPlugin([toRoot('public')])]
};