2012-02-15 11 views
0

次のコードを考慮してください。次のように私はexportsフィールドを宣言した場合:宣言されていない変数に代入する

exports = 
    someFunc : -> # blablabla 
    someOtherFunc : -> 

それはにコンパイルされます:

var exports; 

exports = { 
    someFunc: function() {}, 
    someOtherFunc: function() {} 
}; 

しかし、あなたはおそらく既に知っているように私は宣言されていないままに輸出フィールドを必要としています。言い換えれば、私は何とかコンパイラにvar exports;文を生成しないように通知する必要があります。私はそのようなこの周りをハックすることができていることを知って :

exports.someFunc = -> 
exports.someOtherFunc = -> 

が、それはただ厄介だとのCoffeeScriptの本質は、コードのノイズを低減することがあるので、非常に多く、欠陥のように思えます。

これを回避する方法はありますか?

答えて

0

単純に出力されます。その場合には

module.exports = 
    someFunc : -> # blablabla 
    someOtherFunc : -> 

されるべきだと思います

exports[k] = v for k, v of { 
    someFunc : -> 
    someOtherFunc : -> 
} 

しかし、まだ、それはハックだし、それが唯一Fiを提供して割り当てるために動作します。それは、以前に割り当てられた輸出のフィールドを消去していないので、はるかに優れてexportニーズ宣言されていないオブジェクトのフィールド。宣言されていない変数を割り当てる方法は依然として問題です。

-1

Node.jsモジュールを作成しているため、「エクスポートフィールドが宣言されていないことが必要です」と仮定していますexportsは既に宣言されていますか?その場合、この質問とそのトップの答えはあなたを助けに向かって長い道のりを行くべき:要するにHow do I define global variables in CoffeeScript?

あなたはこのような何かをやる:

root = exports ? this 

root = 
    someFunc  : -> # blablabla 
    someOtherFunc : -> 

役に立てば幸い!

+0

リンクをありがとうございますが、2番目のステートメントで単に 'root'値を再割り当てするので、あなたの提案は間違っています。つまり、最初に 'export'に' root'を割り当てますか?この関数を使用してオブジェクトに再割り当てします。 –

+0

ええ、そうです。 –

2

エクスポート(nodejs内)に直接割り当てることはできません。私は事故スーツでいる、あなたのコードは、CSはモジュールがすでに定義されていると仮定しますと、私はこれを回避する1つのビットより巧妙なハックを考え

module.exports = { 
    someFunc: function() {}, 
    someOtherFunc: function() {} 
}; 
+0

これは正しいです。 'exports'は' module.exports'への参照として機能するモジュール全体の有効範囲を持つ変数です。 'exports = ...'を書くことは 'module.exports'に影響しません。それは簡単な間違いです。 –

関連する問題