2016-04-02 6 views
0

1つのファイル(a.coffee)に関数を定義すると、別のファイル(b.coffee)のNodeJSモジュールで使用できるようになりますか?例えばNodeJS CoffeeScript外部ファイルスコープ

# a.coffee 
b = require('./b') 

getGreeting = (name) -> 
    if name == "foo" 
    "Hey, " 
    else 
    "Hello, " 


b.greet "foo" 



# b.coffee 
module.exports = 
    greet: (name) -> 
    greeting = getGreeting name 
    console.log greeting + name 

coffee -bc *.coffeeでこれをコンパイルしてnodejs a.jsで実行されているが、私も同じ結果に、@getGreetingを使用しようとした

ReferenceError: getGreeting is not defined 
    at Object.module.exports.greet (/home/charlie/Desktop/NodeJSExtTest/b.js:5:16) 
    at Object.<anonymous> (/home/charlie/Desktop/NodeJSExtTest/a.js:14:3) 
    at Module._compile (module.js:413:34) 
    at Object.Module._extensions..js (module.js:422:10) 
    at Module.load (module.js:357:32) 
    at Function.Module._load (module.js:314:12) 
    at Function.Module.runMain (module.js:447:10) 
    at startup (node.js:142:18) 
    at node.js:939:3 

を与えます。

追加情報:

$ coffee -v 
CoffeeScript version 1.10.0 

$ nodejs -v 
v5.9.1 
+0

b.coffeeがgetGreeting – eosterberg

+0

への参照を持っていませんが、どのように私はBを与えること参照?今のところ、私は '(eval b.greet.toString())(" foo ")'の中でやっていますが、それは単に問題を求めているだけです。 – Charlie

答えて

1

あなたは、例えば、BモジュールにgetGreetingを注入でき次のように:

b.coffee:

module.exports = (getGreeting) -> 
    greet: (name) -> 
    greeting = getGreeting name 
    console.log greeting + name 

a.coffee:私はことを得る@eosterberg

b = require('./b')(getGreeting) 
+0

'getGreeting'関数が' a.coffee'からより多くの変数を必要とする場合は、これも機能しますか?メインファイルをより小さなファイルに分割したいが、これらの変数はすべて必要であり、変更は継続する。 – Charlie

+0

はい。モジュール 'b'のコード('(getGreeting) - > greet:... ')の外部関数はモジュール' a'内の他の関数と同じように実行され、JavaScriptの通常のスコープ規則が受け取る関数に適用されます議論として。だから、モジュール 'a'の中でこれらの行に沿って何かを持つことができます:' title = 'Mr. ';もし名前が== 'foo'ならば 'Hey' +タイトル以外は 'Hello、' + title'、次に 'b = require( './b')(getGreeting)'とすると、getGreeting =(name) –

+0

ありがとう!受け入れます – Charlie

関連する問題