我想通过用es2015
替换babel stage-0
和env
预设来“现代化”mern.io starter bolerplate。但是,env
预设似乎无法识别client/modules/Intl/IntlReducer.js:9
中的以下代码段:
import { enabledLanguages, localizationData } from '../../../Intl/setup';
import { SWITCH_LANGUAGE } from './IntlActions';
const initLocale = global.navigator && global.navigator.language || 'en';
const initialState = {
locale: initLocale,
enabledLanguages,
...(localizationData[initLocale] || {}),
// ^
// SyntaxError: client/modules/Intl/IntlReducer.js: Unexpected token
};
const IntlReducer = (state = initialState, action) => {
switch (action.type) {
case SWITCH_LANGUAGE: {
const { type, ...actionWithoutType } = action; // eslint-disable-line
return { ...state, ...actionWithoutType };
}
default:
return state;
}
};
export default IntlReducer;
localizationData
对象填充在Intl/setup.js:56
这个扩展运算符对我来说似乎很正常,我无法发现语法错误。 此外,似乎此文件之前的其他代码正在被编译好,所以我想env预设正确应用。
这次失败的原因是什么?从第0阶段到现有版本的ES,这种特殊的传播运营商风格是不是被接受了?我该如何进一步调查此问题?
完整错误消息(项目根路径已剥离):
node_modules/babel-core/lib/transformation/file/index.js:590
throw err;
^
SyntaxError: client/modules/Intl/IntlReducer.js: Unexpected token (9:2)
7 | locale: initLocale,
8 | enabledLanguages,
> 9 | ...localizationData[initLocale]
| ^
10 | };
11 |
12 | const IntlReducer = (state = initialState, action) => {
at Parser.pp$5.raise (node_modules/babylon/lib/index.js:4454:13)
at Parser.pp.unexpected (node_modules/babylon/lib/index.js:1761:8)
at Parser.pp$3.parseIdentifier (node_modules/babylon/lib/index.js:4332:10)
at Parser.pp$3.parsePropertyName (node_modules/babylon/lib/index.js:4156:96)
at Parser.parsePropertyName (node_modules/babylon/lib/index.js:6229:23)
at Parser.pp$3.parseObj (node_modules/babylon/lib/index.js:4045:12)
at Parser.pp$3.parseExprAtom (node_modules/babylon/lib/index.js:3719:19)
at Parser.parseExprAtom (node_modules/babylon/lib/index.js:7238:22)
at Parser.pp$3.parseExprSubscripts (node_modules/babylon/lib/index.js:3494:19)
at Parser.pp$3.parseMaybeUnary (node_modules/babylon/lib/index.js:3474:19)
at Parser.pp$3.parseExprOps (node_modules/babylon/lib/index.js:3404:19)
at Parser.pp$3.parseMaybeConditional (node_modules/babylon/lib/index.js:3381:19)
at Parser.pp$3.parseMaybeAssign (node_modules/babylon/lib/index.js:3344:19)
at Parser.parseMaybeAssign (node_modules/babylon/lib/index.js:6474:20)
at Parser.pp$1.parseVar (node_modules/babylon/lib/index.js:2340:24)
at Parser.pp$1.parseVarStatement (node_modules/babylon/lib/index.js:2169:8)
答案 0 :(得分:2)
对象传播尚未在规范中,它目前处于第3阶段,这意味着env
预设将不提供此功能。
如果您要将此功能与Babel一起使用,则需要添加babel-plugin-transform-object-rest-spread转换。
中查看ES提案的状态