【问题标题】:Why does running the CoffeeScript compiler multiple times produce different output?为什么多次运行 CoffeeScript 编译器会产生不同的输出?
【发布时间】:2012-08-18 09:15:17
【问题描述】:

我正在尝试编译非常简单的咖啡脚本:

n = 4;

使用代码

require('coffee-script').compile(str);

我在我的解决方案中多次执行此操作,但没有缓存结果。我第一次这样做时,我得到:

(function() {
    var n;
    n = 4;
}).call(this);

但如果我再次调用它,我会得到:

n = 4;

为什么我第二次没有得到包装函数,我怎样才能让它每次都给出相同的结果。

【问题讨论】:

  • 无法重现,我每次都得到相同的(包装的)代码。你试过coffee.compile(str, { bare: false })吗?发布您的代码。
  • @Ricardo 修复了它,令人惊讶的行为,因为在我未定义 options.bare 之前。不过,很高兴它被分类了。如果您想将其发布为答案,我会接受。

标签: javascript node.js coffeescript


【解决方案1】:

无法重现,我每次都得到相同的(包装的)代码。

使用coffee.compile(str, { bare: false }) 强制执行闭包包装。

【讨论】:

    【解决方案2】:

    我相信由于范围问题,它可能会发生(即不同的输出)。

    通常你只需要一个var 声明变量。似乎在第一次调用期间创建了所有需要的声明,第二次调用只是重用它们。

    我相信这可能是因为使用了相同的 require('coffee-script') 实例。

    【讨论】:

    • 好的,有没有办法禁用'coffee-script'的缓存,所以我每次都需要它新鲜?此外,var 语句仍然需要,因为第一个位 get 的代码包含在自调用函数中,因此第二次调用分配 n 会将其分配给 global 对象。
    【解决方案3】:

    由于某种原因,第二次编译无法正常工作。 CoffeeScript 代码总是包装在一个函数中。

    【讨论】:

    • 那么是我启动第二个进程的建议吗?还是有其他方法可以访问 API?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多