Babel将字符串转换为es2015



当我在下面的代码中使用babeljs-repl时,我得到的输出与我在节点项目中使用时得到的输出不同。

这是我正在测试的代码

function test(list) {
return [...list];
}
test();

babeljs repl输出为

"use strict";
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function test(list) {
return _toConsumableArray(list);
}
test();

但当我从我的项目中使用它时

const babel = require("@babel/core");
const code = `
function test(list) {
return [...list];
}
test();
`;
babel.transform(
code,
{
babelrc: true,
filename: ".babelrc"
},
(err, result) => {
console.log(result.code);
}
);

我得到这个输出

var _toConsumableArray = require("D:/Work/Projects/new-setup/node_modules/@babel/runtime/helpers/toConsu
mableArray");                                                                                                                               
                                                                      
function test(list) {                                                                                                                       
return _toConsumableArray(list);                                                                                                          
}                                                                                                                                           
                                                                      
test();                                                                                                                                     

.babelrc文件是

{
"presets": [
[
"@babel/preset-env",
{
"corejs": 3,
"useBuiltIns": "entry"
}
]
]
}

我怎么能得到与babeljs-repl上的输出相同的输出呢?

在babeljs-repl输出中看到的都是babel运行时助手。这些辅助对象是基于与预设环境一起使用的目标浏览器生成的。

因此,如果在babel预设中使用,

{
"presets": [
[
"@babel/preset-env",
{
"corejs": 3,
"useBuiltIns": "entry",
"targets": "defaults"
}
]
]
}

它会给我你粘贴在上面的确切输出。

但如果我把目标改为

{
"presets": [
[
"@babel/preset-env",
{
"corejs": 3,
"useBuiltIns": "entry",
"targets": "defaults, not ie 11, not ie_mob 11"
}
]
]
}

然后它会给我更干净的输出,因为它现在不支持IE11。

最新更新