[英]How to Babel transpile to es5 not es5.1
我正在使用npm,webpack和babel在es6中编写我的库并进行转换+缩小。 但结果转换为使用Object(Object.defineProperty)的ecmaScript 5.1,但我的目标是不支持Object的ecmaScript 5,或者如果发现其他限制则降低ecmaScript。 (我需要的javascript版本是Rhino中使用的版本。)(我的目标是Rhino 1.7R3 )
我的问题是,如何配置babel来做呢? 我发现了polyfill,但我不知道如何使用它来实现我的目标。
babelrc
{ "presets": ["env"] }
webpack.config
module.exports = function(env, argv) {
env = env || {};
const webpack = require('webpack');
const UglifyJsPlugin = webpack.optimize.UglifyJsPlugin;
let libraryName = 'jsgmc';
let plugins = [], outputFile;
if (env.prod) {
plugins.push(new UglifyJsPlugin({minimize: true}));
outputFile = libraryName + '.min.js';
} else {
outputFile = libraryName + '.js';
}
return {
entry: __dirname + '/src/jsgmc.js',
devtool: 'source-map',
output: {
path: __dirname + '/dist',
filename: outputFile,
library: libraryName,
libraryTarget: 'this'
},
module: {
rules: [
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['babel-preset-env'],
plugins: [require('babel-plugin-add-module-exports')]
}
}
}
]
},
plugins: plugins
};
};
使用babel-preset-env时 ,您可以使用配置选项指定要支持的浏览器版本。
遗憾的是,无法指定Rhino,但如果定位一个非常古老的浏览器(例如Internet Explorer 7),则可以尝试使用。
.babelrc
{
"presets": [
["env", {
"targets": {
"browsers": ["ie < 8"]
}
}]
]
}
使用名为browserslist的模块解析配置选项。
您可以在此处在线试用browserslist查询。
另一个可以帮助您的有用工具是此兼容性表 。
有趣的是,这表明Rhino 1.7确实支持Object.defineProperty
。
正如Patrick所说,Rhino 1.7及更低版本不支持Object.defineProperty。 对我来说合适的解决方案是使用这种简单的polyfil 。 请注意,此解决方案是可行的,因为我正在构建的库将不具有高级功能。 否则,其他功能必须用egsham es5 polyfill进行多层填充,这是高度实验性的。 (它的等效垫片es5不包含例如对象特征)
无法透明化为javascript的子版本。 这是5.1或什么都没有。 也可以使用闭包编译器(已经是旧工具)转换到以前的主要版本es3,但它可能会导致一些重大问题,因为现在这是非常古老的js规范。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.