Babel 无法解析 "for each...in" 语句
Babel can't parse "for each...in" statement
我正在尝试将 Salesforce Commerce Cloud 的 .ds 文件转换为 JavaScript,以便我们可以应用标准测试工具(Jest、Mocha 等)。 SFCC 文档表明 .ds 文件是 "Rhino JavaScript",具有用于类流类型检查的非标准扩展名。
到目前为止,使用 transform-flow-strip-types
插件剥离类型注释很简单。但是 SFCC 支持已弃用的 "for each...in" statement from JavaScript 1.6 Babel 令人窒息。
下面所有代码都是available on github.
这是我的来源 src/index.ds 文件:
function dump(a: Array) {
for each (var x in a) {
console.log(x);
}
}
module.exports = dump;
还有我的gulfile.js:
const gulp = require('gulp');
const babel = require('gulp-babel');
gulp.task('test', function () {
gulp.src('src/**/*.ds')
.pipe(babel())
.pipe(gulp.dest('dst'));
});
这是我的 package.json:
{
"name": "dspoc",
"version": "1.0.0",
"description": "poc",
"main": "index.ds",
"author": "cjr",
"license": "ISC",
"devDependencies": {
"babel": "^6.23.0",
"babel-core": "^6.26.3",
"babel-plugin-transform-flow-strip-types": "^6.22.0",
"gulp": "^3.9.1",
"gulp-babel": "^7.0.1"
},
"babel": {
"plugins": [
"transform-flow-strip-types"
]
}
}
当我 运行 gulp test
时,我得到这个:
%> gulp test
[11:23:06] Using gulpfile ~/dev/dspoc/gulpfile.js
[11:23:06] Starting 'test'...
[11:23:06] Finished 'test' after 9.15 ms
events.js:163
throw er; // Unhandled 'error' event
^
SyntaxError: /Users/craser/dev/dspoc/src/index.ds: Unexpected token, expected ( (2:5)
1 | function dump(a: Array) {
> 2 | for each (var x in a) {
| ^
3 | console.log(x);
4 | }
5 | }
at Parser.pp.raise (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:4454:13)
at Parser.pp.unexpected (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:1761:8)
at Parser.pp.expect (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:1749:33)
at Parser.pp.parseForStatement (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:2008:8)
at Parser.pp.parseStatement (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:1836:19)
at Parser.parseStatement (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:5910:22)
at Parser.pp.parseBlockBody (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:2268:21)
at Parser.pp.parseBlock (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:2247:8)
at Parser.pp.parseFunctionBody (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:4235:22)
at Parser.parseFunctionBody (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:5897:20)
我花了很多时间寻找一个插件,让 Babel 将其转换为类似 for...of
语句的东西,但我似乎找不到任何东西。
我现在正处于挖掘 for-of transform 的悬崖边上,并正在创建类似于转换 for each...in
的东西,但我 真的 不如果可以避免的话,我不想把它放进去。
我觉得我在这里遗漏了一些明显的东西。任何人都知道如何做到这一点?
for each...in
从来都不是规范的官方部分,在 Babel 出现时也不存在,因此 Babel 不支持它。恐怕您必须先更新该语法的所有用法,然后 Babel 才能处理它。
我正在尝试将 Salesforce Commerce Cloud 的 .ds 文件转换为 JavaScript,以便我们可以应用标准测试工具(Jest、Mocha 等)。 SFCC 文档表明 .ds 文件是 "Rhino JavaScript",具有用于类流类型检查的非标准扩展名。
到目前为止,使用 transform-flow-strip-types
插件剥离类型注释很简单。但是 SFCC 支持已弃用的 "for each...in" statement from JavaScript 1.6 Babel 令人窒息。
下面所有代码都是available on github.
这是我的来源 src/index.ds 文件:
function dump(a: Array) {
for each (var x in a) {
console.log(x);
}
}
module.exports = dump;
还有我的gulfile.js:
const gulp = require('gulp');
const babel = require('gulp-babel');
gulp.task('test', function () {
gulp.src('src/**/*.ds')
.pipe(babel())
.pipe(gulp.dest('dst'));
});
这是我的 package.json:
{
"name": "dspoc",
"version": "1.0.0",
"description": "poc",
"main": "index.ds",
"author": "cjr",
"license": "ISC",
"devDependencies": {
"babel": "^6.23.0",
"babel-core": "^6.26.3",
"babel-plugin-transform-flow-strip-types": "^6.22.0",
"gulp": "^3.9.1",
"gulp-babel": "^7.0.1"
},
"babel": {
"plugins": [
"transform-flow-strip-types"
]
}
}
当我 运行 gulp test
时,我得到这个:
%> gulp test
[11:23:06] Using gulpfile ~/dev/dspoc/gulpfile.js
[11:23:06] Starting 'test'...
[11:23:06] Finished 'test' after 9.15 ms
events.js:163
throw er; // Unhandled 'error' event
^
SyntaxError: /Users/craser/dev/dspoc/src/index.ds: Unexpected token, expected ( (2:5)
1 | function dump(a: Array) {
> 2 | for each (var x in a) {
| ^
3 | console.log(x);
4 | }
5 | }
at Parser.pp.raise (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:4454:13)
at Parser.pp.unexpected (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:1761:8)
at Parser.pp.expect (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:1749:33)
at Parser.pp.parseForStatement (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:2008:8)
at Parser.pp.parseStatement (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:1836:19)
at Parser.parseStatement (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:5910:22)
at Parser.pp.parseBlockBody (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:2268:21)
at Parser.pp.parseBlock (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:2247:8)
at Parser.pp.parseFunctionBody (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:4235:22)
at Parser.parseFunctionBody (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:5897:20)
我花了很多时间寻找一个插件,让 Babel 将其转换为类似 for...of
语句的东西,但我似乎找不到任何东西。
我现在正处于挖掘 for-of transform 的悬崖边上,并正在创建类似于转换 for each...in
的东西,但我 真的 不如果可以避免的话,我不想把它放进去。
我觉得我在这里遗漏了一些明显的东西。任何人都知道如何做到这一点?
for each...in
从来都不是规范的官方部分,在 Babel 出现时也不存在,因此 Babel 不支持它。恐怕您必须先更新该语法的所有用法,然后 Babel 才能处理它。