3

私がアプリケーションを持っているとしましょう:

./app.coffee:

express = require "express"
module.exports = app = express()
require "./models"

./models/index.coffee

app = require "../app"

次に、次のコマンドを実行します。coffee app.coffee

問題は、コードがプリコンパイルされたときと同じように実行されないことです。

node(コンパイル済み)でアプリを実行すると:

  • app.coffee必要ですmodels
  • models(アプリ)を要求appして返しますmodule.exports

私がアプリを実行するとcoffee

  • app.coffee必要ですmodels
  • models必要appですが、アプリを再度実行し、モデルを再度必要とします

を使用してアプリを実行すると、module.exportsが正しく機能していないようですcoffee。それとも私は何か間違ったことをしているのでしょうか?

4

1 に答える 1

1

ノードの動作はモジュールサイクルcoffeeを管理するために変更されていますが、実行可能ファイルを使用する場合はサポートされていないようです。

循環require()呼び出しがある場合、モジュールが返されるときにモジュールの実行が行われない可能性があります。

[...]

main.jsロードするときa.js、次にa.jsロードしますb.js。その時点で、b.jsをロードしようとしますa.js。無限ループを防ぐために、 exportsオブジェクトの未完成のコピーa.jsがモジュールに返されb.jsます。b.jsその後、ロードが終了し、そのエクスポートオブジェクトがa.jsモジュールに提供されます。

可能であれば、サイクルを避けるようにしてください。考えられる代替案の1つは次のとおりです。

express = require "express"
module.exports = app = express()
models = require "./models"
models app
module.exports = (app) ->
  # ...
于 2013-01-07T02:11:15.913 に答える