Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 巴贝尔罐头';t parse";对于“中的每个…”;陈述_Javascript_Babeljs_Demandware - Fatal编程技术网

Javascript 巴贝尔罐头';t parse";对于“中的每个…”;陈述

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

我正在尝试将Salesforce Commerce Cloud的.ds文件转换为JavaScript,以便我们可以应用标准测试工具(Jest、Mocha等)。SFCC文档表明.ds文件是“Rhino JavaScript”,具有用于类流类型检查的非标准扩展名

到目前为止,使用
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应用于不包含每个文件的文件即可。这同样取决于代码的结构。