2016-04-02 25 views
0

Bir dosyadaki bir işlevi nasıl tanımlar (a.coffee), böylece başka bir dosyadaki (b.coffee) bir NodeJS modülü kullanabilir? ÖrneğinNodeJS CoffeeScript harici dosya kapsamı

:

# 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 ile bu Derleme ve nodejs a.js ile çalışan Ayrıca aynı sonuçla, @getGreeting kullanmayı denedim

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 

verir.

Ekstra bilgi:

$ coffee -v 
CoffeeScript version 1.10.0 

$ nodejs -v 
v5.9.1 
+0

b.coffee getGreeting – eosterberg

+0

başvurusu yok, ama nasıl b vereceğini referans? Şimdilik, ben: (eval b.greet.toString()) ("foo") 'da yapıyorum, ama bu sadece problemler istiyor. – Charlie

cevap

1

Sen mesela b modüle getGreeting enjekte edebilir aşağıdaki gibi:

b.coffee:

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

a.coffee: Anladım @eosterberg

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

Bu işlev, "getGreeting" işlevi "a.coffee" den daha fazla değişken gerektiriyorsa da işe yarayacak mı? Ana dosyamı daha küçük dosyalara bölmek istiyorum ama hepsi bu değişkenlere ihtiyaç duyuyor ve – Charlie

+0

Evet. 'B' modülündeki dış fonksiyon (' (getGreeting) -> selamlama: ... ')' a' modülündeki herhangi bir işlev gibi yürütülür ve JavaScript'in normal kapsam kuralları, alabileceği herhangi bir işlev için geçerlidir. bir argüman olarak. Yani bu satırlar boyunca bir şeylere sahip olabilirsiniz: a ':' title = 'Mr. '; getGreeting = (isim) -> isim == 'foo' sonra 'Hey,' + title else 'Merhaba,' + title', sonra 'b = required ('./ b') (getGreeting)'. –

+0

Çok teşekkürler! Kabul edecek – Charlie