让我们说我有一个申请表:
./ app.coffee:
express = require "express"
module.exports = app = express()
require "./models"
./模型/ index.coffee
app = require "../app"
然后我运行命令:coffee app.coffee
问题是代码的运行方式与预编译时的运行方式不同。
当我使用node
(已编译)运行我的应用时:
app.coffee
需要models
models
需要app
并返回module.exports
(app)当我使用coffee
运行我的应用时:
app.coffee
需要models
models
需要app
,但app会再次运行并再次需要模型使用coffee
运行我的应用程序时,似乎module.exports无法正常工作。或者也许我做错了什么?
答案 0 :(得分:1)
节点管理module cycles的行为有所改变,使用coffee
可执行文件时似乎不支持该行为:
当有循环
require()
调用时,返回时可能无法执行模块。[...]
当
main.js
加载a.js
时,a.js
依次加载b.js
。此时,b.js
尝试加载a.js
。为了防止无限循环,a.js
导出对象的未完成副本将返回到b.js
模块。然后b.js
完成加载,并将其exports对象提供给a.js
模块。
如果可以的话,尽量避免循环。一种可能的选择是:
express = require "express"
module.exports = app = express()
models = require "./models"
models app
module.exports = (app) ->
# ...