首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >咖啡-cj会覆盖每个类的module.exports

咖啡-cj会覆盖每个类的module.exports
EN

Stack Overflow用户
提问于 2012-12-04 18:18:10
回答 1查看 84关注 0票数 0

我只是不明白这是如何工作的:据我所知,在CoffeeScript中定义类/模块的一种非常常见的方法是在文件的顶部使用module.exports = class MyClass。我还猜测咖啡编译器将促进此模式。举这个极简主义的例子:

代码语言:javascript
复制
# src/Foo.coffee
module.exports = class Foo

# src/Bar.coffee
module.exports = class Bar

然后使用以下命令编译并连接这两个文件:

代码语言:javascript
复制
coffee -cj all.js src

结果是all.js,其中为每个模块重新定义/覆盖module.exports:

代码语言:javascript
复制
// 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,使其只包含它自己。

代码语言:javascript
复制
Foo = require('foo');

我想这是一个相当低级的问题,但我似乎在任何地方都得不到一个好的答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-06 15:04:54

这几乎就是我们想要的行为。您正在将两个模块合并为一个模块,并且它们都希望处于顶层,因此它们中的一个必须获胜。

一种可能的解决方案如下:

代码语言:javascript
复制
# src/Foo.coffee
module.exports.Foo = class Foo

# src/Bar.coffee
module.exports.Bar = class Bar

这会产生:

代码语言:javascript
复制
# 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中)

代码语言:javascript
复制
{Foo, Bar} = require "all"

获取其中包含的类

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13700614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档