问题标签 [sweet.js]

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 回答
121 浏览

javascript - 如何使用 sweet.js 编译多个文件?

如何使用 sweet.js 二进制文件编译多个文件?

所以这样的事情:sjs -o out *.js......

...在目录中生成单独的编译文件out

这适用于包含require()多个内部文件的 npm 模块。

编辑:我有动力在一次调用中执行此操作,sjs因为我正在导入一个-m lambda-chop/macros速度很慢的 sweetjs 模块。sjs -m lambda-chop/macros为每个源文件运行单独的命令会导致不必要的缓慢构建过程。

0 投票
1 回答
57 浏览

javascript - 在 sweet.js 案例中使用全局变量

我正在尝试创建一个宏,每次调用时都会将递增值扩展到输出中。到目前为止,我已经得到了这个,但它每次都将值重新初始化为 0:

产量:

当我想要的是:

如何定义n为全局变量,以便我可以在宏之外递增和保留其值?

更新:

我可以通过将分配更改n为 eval 来使其工作,但这真的感觉像是在作弊:

0 投票
0 回答
38 浏览

sweet.js - 将参数的文字值获取到 sweet.js 宏

我已经定义了一个宏,我正在尝试测试作为参数传递的值之一以确定如何发出代码。但是,当我尝试使用该值时,我不断收到错误。这是一个说明问题的简单测试:

我得到的错误是:

我通过调用 makeIdent、syntaxUnwrap 等进行了各种尝试,但没有任何运气。如何测试通过的值?

更新:在玩了一些东西之后,我发现我可以使用这个构造来获取值:

但后来我发现这个页面建议在某一时刻token.value.raw使用而不是token.value,这进一步表明,由于我没有通过官方记录的 API,我可能正在访问可能会更改的未记录的内部结构。

0 投票
0 回答
22 浏览

javascript - 访问 sweet.js 中的嵌套范围

我正在尝试定义一些宏,这些宏允许为真正异步的函数声明一系列函数调用。宏将这些调用序列转换为延续;即一个函数,它接受两个参数:函数中要继续的位置和函数的本地状态。

所以,这个想法是:

=>

为此,我定义了两个宏,function并且f. 然而,在一般情况下,将有一个完整的函数列表,除此之外f可以任意使用并与函数定义中的其他(非宏)代码混合。 这个问题似乎是在问一个更狭窄的问题,我不确定接受的答案(命名模式)是否有效(我不知道如何使它工作),因为需要允许从多种选择中选择任意数量的顺序子宏。

问题是,这需要对嵌套的匿名函数起作用,所以我需要一些方法来在与当前函数相关的 case 语句中分配这些顺序语句编号。我该怎么做呢?

这里有一个例子。

对于第一种情况,一切正常:每个 case 语句在回调函数中传递下一个 case 语句的编号。但是对于第二种情况,这会失败,例如,第一个 case 语句试图访问嵌套函数中第一个 case 语句的编号。这是因为我们使用全局变量来跟踪案例编号,但我不知道如何相对于当前范围来跟踪这个变量。使用 console.log 我跟踪了评估,发现各个宏没有以嵌套方式评估。如何在一个宏中建立一个值,然后从作为该宏的词法子级的任何宏访问该值?

0 投票
1 回答
15 浏览

sweet.js - Sweet.js 为模板中的匹配添加前缀

鉴于此宏

我试图得到这个输出:

但我得到的是

在绑定值之间添加任何非字母数字字符some$attr正确输出绑定值。

0 投票
0 回答
36 浏览

javascript - 无法在 sweetjs 中创建类似宏的 haskell

我想创建一个这样的宏

应该像这样扩展:

SweetJS 代码:

仅当我更改 $guards:(h) 和 $lastGuard:(h) 而不是 $guards:(|) 和 $lastGuard:(|) 以及类似的实际代码时才有效

原因是我无法阻止 sweetjs 解析相邻的“|”(管道)分隔符。谁能建议我该怎么做?

0 投票
1 回答
49 浏览

javascript - Sweet.js 不输出任何东西

我有一个非常简单的 sweet.js 文件,我正在尝试编译:

...使用此命令:

但是没有任何输出;out.js 文件已创建,但它不包含任何内容。起初我认为这可能是 sweet.js 文件本身的问题,但是当我使用 sweet.js 在线编辑器对其进行测试时,它可以正常工作。

我没有正确使用“sjs”命令吗?还有什么我忽略的吗?

0 投票
2 回答
72 浏览

javascript - sweet.js 替换这个。和 @

我想this.@咖啡脚本中的符号替换。我写了宏:

但是得到了

如何解决这个问题?

0 投票
1 回答
66 浏览

sweet.js - sweet.js:转换重复标记的出现

我想定义一个可以转换的甜蜜宏

进入

我目前的尝试是

然而,这给了我

我怀疑我并不真正了解它是如何...工作的,并且可能需要以某种方式循环每个值$prop并为每个对象构建语法对象并以某种方式将它们连接起来,但我不知道如何做到这一点。

0 投票
1 回答
1626 浏览

webpack - babel-plugin-macros 与 Sweet.js 的用例是什么?

我对 JavaScript 中的宏很好奇,对babel-plugin-macrosSweet.js 之间的比较有点困惑。他们都解决同一个问题吗?它们都适合同一个工具链吗?

特别是,我希望将这些工具中的一个与 ES2015 代码一起使用,这些代码将使用 Webpack 和 Babel 转换为 ES5,并且不确定这些工具中的任何一个如何与转换交互。