Составной не может требовать файла в контроллере приложения

Мы используем 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);

Может ли кто-нибудь помочь объяснить проблему и как ее решить. И как мы находим, что папка проверяется на необходимость?

1 ответ

Решение

require('../utils/email-utils.js') должен нормально работать, потому что это правильное местоположение.

Однако, по-видимому, CompoundJS делает что-то напуганное, так как он запускает ваш код eval, что делает требование относительно некоторого пути из самого модуля CompoundJS (читая документы CompoundJS, это потому, что вы используете eval controllers).

Я думаю, что это лучше всего решить путем корректировки NODE_PATH переменная окружения, поэтому она включает в себя ваш базовый каталог (compoundApp). Сюда, require('app/utils/email-utils') должно работать (хотя я не знаком с тонкостями переменных среды Node в Windows).

Другие вопросы по тегам