我只是不明白这是如何工作的:据我所知,在CoffeeScript中定义类/模块的一种非常常见的方法是在文件的顶部使用module.exports = class MyClass。我还猜测咖啡编译器将促进此模式。举这个极简主义的例子:
# src/Foo.coffee
module.exports = class Foo
# src/Bar.coffee
module.exports = class Bar然后使用以下命令编译并连接这两个文件:
coffee -cj all.js src结果是all.js,其中为每个模块重新定义/覆盖module.exports:
// Generated by CoffeeScript 1.4.0
(function() {
var Bar, Foo;
module.exports = Bar = (function() {
function Bar() {}
return Bar;
})();
module.exports = Foo = (function() {
function Foo() {}
return Foo;
})();
}).call(this);如果我现在尝试这样做,结果将是一个错误,指出找不到Foo模块,这是正确的,因为最后一个模块(这里: Bar)重新定义了module.exports,使其只包含它自己。
Foo = require('foo');我想这是一个相当低级的问题,但我似乎在任何地方都得不到一个好的答案。
发布于 2012-12-06 15:04:54
这几乎就是我们想要的行为。您正在将两个模块合并为一个模块,并且它们都希望处于顶层,因此它们中的一个必须获胜。
一种可能的解决方案如下:
# src/Foo.coffee
module.exports.Foo = class Foo
# src/Bar.coffee
module.exports.Bar = class Bar这会产生:
# all.js
(function() {
var Bar, Foo;
module.exports.Bar = Bar = (function() {
function Bar() {}
return Bar;
})();
module.exports.Foo = Foo = (function() {
function Foo() {}
return Foo;
})();
}).call(this);然后您可以使用(在CoffeeScript中)
{Foo, Bar} = require "all"获取其中包含的类
https://stackoverflow.com/questions/13700614
复制相似问题