Составной не может требовать файла в контроллере приложения
Мы используем 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).