Coffeescript 赋值给未声明的变量 请考虑下面的代码。如果我声明导出字段如下: exports = someFunc : -> # blablabla someOtherFunc : ->
它被编译成:Coffeescript 赋值给未声明的变量 请考虑下面的代码。如果我声明导出字段如下: exports = someFunc : -> # blablabla someOtherFunc : ->,coffeescript,Coffeescript,它被编译成: var exports; exports = { someFunc: function() {}, someOtherFunc: function() {} }; 但正如您可能已经知道的,我需要导出字段保持未声明状态。换句话说,我需要以某种方式通知编译器不要生成var导出语句。 我知道我可以像那样解决这个问题: exports.someFunc = -> exports.someOtherFunc = -> 但这很混乱,而且看起来很像一个缺陷,因为Coff
var exports;
exports = {
someFunc: function() {},
someOtherFunc: function() {}
};
但正如您可能已经知道的,我需要导出字段保持未声明状态。换句话说,我需要以某种方式通知编译器不要生成var导出代码>语句。
我知道我可以像那样解决这个问题:
exports.someFunc = ->
exports.someOtherFunc = ->
但这很混乱,而且看起来很像一个缺陷,因为CoffeeScript的本质是减少代码噪音
有没有更好的方法解决这个问题?我假设您“需要导出字段保持未声明状态”,因为您正在编写一个Node.js模块exports
已经声明了,是吗?在这种情况下,这个问题及其最重要的答案应该对你有很大帮助:
简而言之,您将执行以下操作:
root = exports ? this
root =
someFunc : -> # blablabla
someOtherFunc : ->
希望有帮助 我认为您不能直接分配给导出(在nodejs中)。我认为你的代码应该是
module.exports =
someFunc : -> # blablabla
someOtherFunc : ->
在这种情况下,CS将假定模块已经定义,并将简单地输出
module.exports = {
someFunc: function() {},
someOtherFunc: function() {}
};
我想到了一个更聪明的方法来解决这个问题,它碰巧更适合导出
需要,因为它不会擦除以前指定的导出字段:
exports[k] = v for k, v of {
someFunc : ->
someOtherFunc : ->
}
但这仍然是一个黑客,它只适用于分配未声明对象的字段。如何分配未声明的变量仍然是一个问题。感谢您的链接,但您的建议是错误的,因为您只需在第二条语句中重新分配根
值。即,首先将根分配给导出?此
,然后将其重新分配给具有函数的对象。这是正确的<代码>导出
是一个具有模块范围的变量,用作对模块的引用。导出
。写入exports=…
不会影响module.exports
。这是一个容易犯的错误。