问题标签 [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.
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 看到它。对不起,我是新手,在这里用消防水管喝水。谢谢
javascript - 将 MemberExpression 转换为 CallExpression
如何将 MemberExpression 转换为 CallExpression 以运行 JS 以使用 ESPrima 获取对象键?这是我的输入:
我想要的是:
来自"lo" + "G".toLowerCase()
外部助手,所以我的问题只是转换.log
为可以执行 JS 以获取最终密钥的“数组”元素。
如果你查看 AST,你可以看到:
但是,我不知道如何将其转换为 CallExpression。ESPrima 甚至可以做到这一点吗?
javascript - escodegen 的逐字记录选项
我被 escodegen verbatim 选项难住了。它声称 options.verbatim 的值应该是一个字符串,该字符串被视为属性名称,如果存在于任何表达式节点上(在我的测试中使用 type="Literal"),则将使用该属性的值而不是escodegen 会为该节点生成的任何内容。
这是我的简短测试程序:...
...
和输出: ...
...
我显然错过了一些东西!非常感谢任何帮助。
- 富有的
import - 无法解析错误:伊斯坦布尔“导入”时出现意外令牌
我正在使用伊斯坦布尔进行量角器测试的代码覆盖。
在检测源代码的过程中,我收到“无法解析,意外令牌”错误,在完成错误后发现“导入”令牌正在创建问题。
一直在研究 Angular2 和 Typescript。
我正在使用命令:istanbul instrument ./dir/to/instrument/ -o ./out/dir/
伊斯坦布尔默认使用 esprima 解析器在检测之前解析代码。这是一个解析错误,但我找不到任何解决方案来解决它。
伊斯坦布尔:v0.4.5
Esprima 解析器:v3.1.3
javascript - 如何基于 AST 转换生成 JavaScript 源映射?
假设我 AST 将 JavaScript 文件的内容从状态 A 转换为状态 B。
我如何制作随附的源地图?我正在使用esprima
and estravese
(estraverse.replace) 来遍历一个 AST(我有对应于初始 AST 的源映射)并将其转换为另一个 AST(但我没有生成的源映射)。
我怎样才能得到那个源图?
编辑:我正在使用esprima和estraverse进行 AST 转换。我的转变是这样的:
javascript - 将多个调用变成一个调用链
我正在创建一个库,它make
在全局命名空间 () 上导出一个函数 (),app
用于定义模块或引用它,类似于angular.module
所做的。
当我调用它时,我确保不存储对make(name, [deps])
调用的任何引用,因此它将始终使用主app
对象。
用法是这样的:
我希望上面的代码变成它:
所以它应该将多个单独的对 return from 的调用make
变成一个大的(顺序无关紧要并且没有副作用)。
我尝试了什么:
我打算使用esprima
,estraverse
和escodegen
,这就是我实际拥有的:
我的问题是:我怎样才能绕过 AST 并完成我想做的事情? 提前致谢!
scala - sbt.ResolveException:未解决的依赖项:org.webjars.npm#esprima;3.1.0
我正在尝试构建项目play-angular2-typescript但无法构建并出现错误:
esprima
我到处搜索,在任何在线回购中都找不到这些版本。我只能找到最高版本 2.7.2。因此,我在文件中添加了以下行build.sbt
:
但是构建的 sbt 仍然失败并出现相同的错误。有没有办法来解决这个问题?
更新答案导致:
javascript - 扩展 Javascript 语法以添加打字
我想扩展 javascript 以添加自定义类型检查。
例如
这将编译为:
这样做最直接的方法是什么?
到目前为止,我已经看过:
- sweet.js(在线文档看起来已经过时了,因为我认为它正在经历某种内部重写)
- esprima 和 escodegen(不知道从哪里开始)
- 使用正则表达式手动解析
javascript - 如何使用程序跨包重命名 ES6 类方法
我想混淆 ES6 类方法名称。我正在使用 webpack 将我的所有代码捆绑到一个 bundle.js 中。
是否可以找到属于某个类的函数的所有用途并重命名它们?
我希望编写一个可以用作构建过程的一部分的程序,而不是 IDE 功能。
我该怎么做?
javascript - 删除节点后使用 escodegen 生成代码时出错
首先我创建了一个esprima
AST,然后我想删除一个节点estraverse
,最后使用escodegen
. 但我得到一个错误。
我正在尝试的代码是:
错误跟踪是:
难道我做错了什么?这是错误escodegen
还是错误estraverse
?
提前致谢。