0

私はこれがどのように機能するかについて頭を悩ませることができません.CoffeeScriptでクラス/モジュールを定義するかなり一般的な方法module.exports = class MyClassは、ファイルの先頭で使用することです。また、コーヒー コンパイラがこのパターンを容易にするだろうと推測します。このミニマリストの例を見てみましょう:

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

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

次に、2 つをコンパイルして結合します。

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');

これは非常に初歩的な質問だと思いますが、どこにも良い答えが得られないようです。

4

1 に答える 1

1

これはほぼ望ましい動作です...2つのモジュールを1つにマージし、両方ともトップレベルになりたいので、そのうちの1つが勝つ必要があります。

考えられる解決策の1つは、次のとおりです。

# 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"

そこに含まれるクラスに参加する

于 2012-12-06T07:04:54.263 に答える