0

我们正在使用 CompoundJS 开发一个应用程序,其文件夹结构如下:

compoundApp
|-- app
|   |-- controllers
|   |   |-- application_controller.js
|   |   |-- login_controller.js
|   |-- utils
|   |   |-- email-utils.js  

application_controller.js中,我们需要 email-util.js 作为以下代码:

var _ = require('underscore'),
passport = require('passport'),
    EmailUtils = require('./app/utils/email-utils.js')(compound);

当我们启动应用程序时,我们会收到此错误:

Error: Cannot find module './app/utils/email-utils.js'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Promise.eval (eval at <anonymous> (d:\TiniPlanet_SVN\src\TiniGame\trunk\tiNiWeb\node_module\compound\node_modules\kontroller\lib\base.js:157:17), <anonymous>:145:22)

对于不同的文件夹级别,我们遇到了同样的问题:

EmailUtils = require('../app/utils/email-utils.js')(compound);

或者

EmailUtils = require('../utils/email-utils.js')(compound);

或者

EmailUtils = require('./utils/email-utils.js')(compound);

任何人都可以帮助解释这个问题以及如何解决它。我们如何找到正在检查该文件夹是否需要?

4

1 回答 1

1

require('../utils/email-utils.js')应该正常工作,因为那是正确的位置。

但是,显然 CompoundJS 做了一些时髦的事情,因为它使用 运行您的代码eval,这使得 require 相对于 CompoundJS 模块本身内部的某些路径(阅读 CompoundJS 文档,这是因为您正在使用eval controllers)。

我认为最好通过调整NODE_PATH环境变量来解决它,使其包含您的基本目录(compoundApp)。这样,require('app/utils/email-utils')应该可以工作(尽管我不熟悉 Windows 上 Node 环境变量的复杂性)。

于 2013-10-05T17:32:00.637 回答