Javascript coffee-cj覆盖每个类的module.exports
我只是不知道这应该如何工作:据我所知,在CoffeeScript中定义类/模块的一种非常常见的方法是在文件顶部使用Javascript coffee-cj覆盖每个类的module.exports,javascript,coffeescript,commonjs,Javascript,Coffeescript,Commonjs,我只是不知道这应该如何工作:据我所知,在CoffeeScript中定义类/模块的一种非常常见的方法是在文件顶部使用module.exports=class MyClass。我还猜想,coffee编译器将促进这种模式。以这个极简主义者为例: #src/Foo.coffee module.exports=类Foo #src/酒吧咖啡 module.exports=类栏 然后编译并使用以下命令将两者连接起来: coffee -cj all.js src 结果是all.js,其中module.exp
module.exports=class MyClass
。我还猜想,coffee编译器将促进这种模式。以这个极简主义者为例:
#src/Foo.coffee
module.exports=类Foo
#src/酒吧咖啡
module.exports=类栏
然后编译并使用以下命令将两者连接起来:
coffee -cj all.js src
结果是all.js,其中module.exports为每个模块重新定义/覆盖:
//由CoffeeScript 1.4.0生成
(功能(){
var-Bar,Foo;
module.exports=Bar=(函数(){
函数栏(){}
返回杆;
})();
module.exports=Foo=(函数(){
函数Foo(){}
返回Foo;
})();
}).打电话(这个);
如果我现在尝试这样做,结果将是一个错误,指出找不到Foo模块cound,这是正确的,因为最后一个模块(此处:Bar)已重新定义module.exports以仅包含其自身
Foo=require('Foo');
我想这是一个很难回答的问题,但我似乎在任何地方都找不到一个好答案。这几乎是我想要的行为。。。你将两个模块合并为一个模块,他们都希望处于顶级水平,因此其中一个模块必须获胜 一种可能的解决办法如下:
# 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中)
要获取其中包含的类是的,您不能真正为此使用
--join
选项。如果您需要使用--join
,我建议您以不同的方式构造代码。
{Foo, Bar} = require "all"