Javascript 巴贝尔罐头';t parse";对于“中的每个…”;陈述
我正在尝试将Salesforce Commerce Cloud的.ds文件转换为JavaScript,以便我们可以应用标准测试工具(Jest、Mocha等)。SFCC文档表明.ds文件是“Rhino JavaScript”,具有用于类流类型检查的非标准扩展名 到目前为止,使用Javascript 巴贝尔罐头';t parse";对于“中的每个…”;陈述,javascript,babeljs,demandware,Javascript,Babeljs,Demandware,我正在尝试将Salesforce Commerce Cloud的.ds文件转换为JavaScript,以便我们可以应用标准测试工具(Jest、Mocha等)。SFCC文档表明.ds文件是“Rhino JavaScript”,具有用于类流类型检查的非标准扩展名 到目前为止,使用transform flow strip types插件剥离类型注释非常简单。但SFCC支持巴贝尔正在扼杀的一个不推荐的方案 下面的所有代码都是 这是我的源src/index.ds文件: function dump(a: A
transform flow strip types
插件剥离类型注释非常简单。但SFCC支持巴贝尔正在扼杀的一个不推荐的方案
下面的所有代码都是
这是我的源src/index.ds文件:
function dump(a: Array) {
for each (var x in a) {
console.log(x);
}
}
module.exports = dump;
和my 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"
]
}
}
当我运行gulptest
时,我得到以下结果:
%> 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$5.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$1.parseForStatement (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:2008:8)
at Parser.pp$1.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$1.parseBlockBody (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:2268:21)
at Parser.pp$1.parseBlock (/Users/craser/dev/dspoc/node_modules/babylon/lib/index.js:2247:8)
at Parser.pp$3.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)
我花了相当多的时间寻找一个插件,它可以让巴贝尔将此转换成类似于语句的for…of
语句,但我似乎找不到任何东西
我现在正处于挖掘was构建的悬崖边,并为中的每个…创建类似于transform的东西,但如果可以避免的话,我真的不想把这项工作放进去
我觉得我错过了一些明显的东西。有人知道如何做到这一点吗?中的每一个……从来都不是规范的正式部分,在巴贝尔出现时也不存在,所以巴贝尔不支持它。恐怕在Babel能够处理之前,您必须更新该语法的所有用法。不幸的是,更新源代码不是这个项目的第一步。(至少目前如此。)看起来我要么组装我自己的预处理器,要么为Babel编写一个转换来处理这个问题。Babel不支持自定义解析,只支持自定义转换,所以你必须自己制作一个支持它的解析器分支,仅供参考。当我们想将Mocha/Istanbul应用于SFCC时,我们选择使用标准JavaScript而不是ds。使用正则表达式很容易摆脱类型注释。也许你可以用同样的方法来处理for..每个语句。这还取决于您的代码库有多遗留,以及您在进行这一重大更改时感觉有多舒适。您也可以从您的babel配置中排除有问题的文件,只需将babel/mocha/jest应用于不包含每个文件的文件即可。这同样取决于代码的结构。