Babel es6 Set 转换问题

1,407 阅读1分钟

近期在开发 NutUI 组件库时,发现一个Babel转换 ... new Set()的问题

输入此代码

let abc= [...new Set([1,2,3])];
console.log(abc);

Babel 配置文件

const presets = [
	[
		'@babel/preset-env',
		{
			loose: true,
			modules: 'commonjs',
			targets: {
				browsers: ['Android >= 4', 'iOS >= 8']
			}
		}
	]
];

const plugins = [
'@babel/plugin-transform-runtime',
'@babel/plugin-transform-object-assign',
'@babel/plugin-proposal-object-rest-spread'
];

module.exports = { presets, plugins };

期望执行结果 Chrome

let abc= [...new Set([1,2,3])];
console.log(abc); // [1,2,3]

当前执行结果

let abc= [...new Set([1,2,3])];
console.log(abc); // [Set(3)] 0: Set(3) {1, 2, 3}

解决方案

经过搜索发现 loose: true 模式所导致, 解决办法 loose设置为 false

const presets = [
	[
		'@babel/preset-env',
		{
			loose: false,
			modules: 'commonjs',
			targets: {
				browsers: ['Android >= 4', 'iOS >= 8']
			}
		}
	]
];

const plugins = [
'@babel/plugin-transform-runtime',
'@babel/plugin-transform-object-assign',
'@babel/plugin-proposal-object-rest-spread'
];

module.exports = { presets, plugins };

参考链接

github.com/babel/babel…