问题标签 [esprima]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
49 浏览

angularjs - 使用 Karma 测试角度服务时的 ReferenceError

我有一个简单的 Angular.js 服务。它使用了一段名为 esprima 的代码。在 index.html 中引用了 Esprima,如下所示:

...脚本 src="https://unpkg.com/esprima@~3.1/dist/esprima.js"...

在我的代码中,它是这样引用的:

根据 Esprima 文档,html 中的 CDN 引用使其成为全局变量,因此在我的 angular.js 服务中使用 esprima 应该可以工作——它确实如此。

但是,当尝试从业力测试中运行我的 angularjs 服务代码时,我收到了“esprima”的 ReferenceError。我猜 Karma 对我的 html 文件没有用处,因此也没有引入 Esprima 包。

我不知道如何“导入” Esprima 包,以便在从浏览器使用时可以看到它,并且可以从 Karma 看到它。对不起,我是新手,在这里用消防水管喝水。谢谢

0 投票
0 回答
420 浏览

javascript - 将 MemberExpression 转换为 CallExpression

如何将 MemberExpression 转换为 CallExpression 以运行 JS 以使用 ESPrima 获取对象键?这是我的输入:

我想要的是:

来自"lo" + "G".toLowerCase()外部助手,所以我的问题只是转换.log为可以执行 JS 以获取最终密钥的“数组”元素。

如果你查看 AST,你可以看到:

但是,我不知道如何将其转换为 CallExpression。ESPrima 甚至可以做到这一点吗?

0 投票
0 回答
89 浏览

javascript - escodegen 的逐字记录选项

我被 escodegen verbatim 选项难住了。它声称 options.verbatim 的值应该是一个字符串,该字符串被视为属性名称,如果存在于任何表达式节点上(在我的测试中使用 type="Literal"),则将使用该属性的值而不是escodegen 会为该节点生成的任何内容。

这是我的简短测试程序:...

...

和输出: ...

...

我显然错过了一些东西!非常感谢任何帮助。

- 富有的

0 投票
1 回答
465 浏览

import - 无法解析错误:伊斯坦布尔“导入”时出现意外令牌

我正在使用伊斯坦布尔进行量角器测试的代码覆盖。

在检测源代码的过程中,我收到“无法解析,意外令牌”错误,在完成错误后发现“导入”令牌正在创建问题。

一直在研究 Angular2 和 Typescript。

我正在使用命令:istanbul instrument ./dir/to/instrument/ -o ./out/dir/

伊斯坦布尔默认使用 esprima 解析器在检测之前解析代码。这是一个解析错误,但我找不到任何解决方案来解决它。

伊斯坦布尔:v0.4.5

Esprima 解析器:v3.1.3

0 投票
1 回答
1035 浏览

javascript - 如何基于 AST 转换生成 JavaScript 源映射?

假设我 AST 将 JavaScript 文件的内容从状态 A 转换为状态 B。

我如何制作随附的源地图?我正在使用esprimaand estravese(estraverse.replace) 来遍历一个 AST(我有对应于初始 AST 的源映射)并将其转换为另一个 AST(但我没有生成的源映射)。

我怎样才能得到那个源图?

编辑:我正在使用esprimaestraverse进行 AST 转换。我的转变是这样的:

0 投票
0 回答
99 浏览

javascript - 将多个调用变成一个调用链

我正在创建一个库,它make在全局命名空间 () 上导出一个函数 (),app用于定义模块或引用它,类似于angular.module所做的。

当我调用它时,我确保不存储对make(name, [deps])调用的任何引用,因此它将始终使用主app对象。

用法是这样的:

我希望上面的代码变成它:

所以它应该将多个单独的对 return from 的调用make变成一个大的(顺序无关紧要并且没有副作用)。

我尝试了什么:

我打算使用esprima,estraverseescodegen,这就是我实际拥有的:

我的问题是:我怎样才能绕过 AST 并完成我想做的事情? 提前致谢!

0 投票
1 回答
735 浏览

scala - sbt.ResolveException:未解决的依赖项:org.webjars.npm#esprima;3.1.0

我正在尝试构建项目play-angular2-typescript但无法构建并出现错误:

esprima我到处搜索,在任何在线回购中都找不到这些版本。我只能找到最高版本 2.7.2。因此,我在文件中添加了以下行build.sbt

但是构建的 sbt 仍然失败并出现相同的错误。有没有办法来解决这个问题?

更新答案导致:

0 投票
1 回答
112 浏览

javascript - 扩展 Javascript 语法以添加打字

我想扩展 javascript 以添加自定义类型检查。

例如

这将编译为:

这样做最直接的方法是什么?

到目前为止,我已经看过:

  • sweet.js(在线文档看起来已经过时了,因为我认为它正在经历某种内部重写)
  • esprima 和 escodegen(不知道从哪里开始)
  • 使用正则表达式手动解析
0 投票
0 回答
220 浏览

javascript - 如何使用程序跨包重命名 ES6 类方法

我想混淆 ES6 类方法名称。我正在使用 webpack 将我的所有代码捆绑到一个 bundle.js 中。

是否可以找到属于某个类的函数的所有用途并重命名它们?

我希望编写一个可以用作构建过程的一部分的程序,而不是 IDE 功能。

我该怎么做?

0 投票
1 回答
705 浏览

javascript - 删除节点后使用 escodegen 生成代码时出错

首先我创建了一个esprimaAST,然后我想删除一个节点estraverse,最后使用escodegen. 但我得到一个错误。

我正在尝试的代码是:

错误跟踪是:

难道我做错了什么?这是错误escodegen还是错误estraverse

提前致谢。