Как требовать глубоких вложенных модулей NodeJS?
у меня есть следующая структура приложения:
application
|- config
|----- config.js
|- routes
|------ api
|-----------router.js
|- Application.js
|- package.json
In / routes / api / маршрутизатор.модуль js мне нужно требовать /config / config.JS файл и выполните следующие действия:
require('../../config/config.js');
Я нашел код выше уродливым и хочу сделать его более красивым. Также, если я двигаюсь /routes/api/router.js
в другую папку я должен рефакторинг все требует. Каковы наилучшие методы, требующие, чтобы модули и можно ли требовать конфигурации.js из корневой папки приложения, что-то вроде следующий:
require('/config/config.js');
спасибо.
3 ответов
есть несколько способов обойти эту проблему. Один из них-поместить весь ваш общий код (например,config.js
) в директории node_modules
(через lib
здесь, Если вы хотите иметь каталоги, отличные от config
там):
application
|- node_modules
|----- lib
|---------- config
|-------------- config.js
|- routes
|------ api
|-----------router.js
|- Application.js
|- package.json
таким образом, вам может потребоваться config.Яш, используя require( 'lib/config/config.js' )
.
кроме того, вы можете создать lib
символическая ссылка в node_modules
и связать его с lib в вашей структуре каталогов приложений:
application
|- node_modules
|----- lib -> ../../lib
|- lib
|------ config
|---------- config.js
|- routes
|------ api
|-----------router.js
|- Application.js
|- package.json
одно другому альтернативой, которая, к сожалению, не поощряется узловыми документами, является использование NODE_PATH
что позволяет указать каталоги, которые узел require()
алгоритм должен изучить. По той же схеме, что и выше lib
, вы могли бы сделать:
application
|- lib
|------ config
|---------- config.js
|- routes
|------ api
|-----------router.js
|- Application.js
|- package.json
и set NODE_PATH
равна $path_to_application/lib
.
обновление
нашел эта великая дискуссия по теме, которая включает в себя параметры выше, а также несколько других те.
require('/config/config.js');
не будет работать, поскольку вы используете корень системы (ОС), а не корень приложения.
var path=require('path');
var root=path.dirname(process.mainModule.filename);
или
var root=process.cwd();
даст вам корень применение. Для перехода к конфигурации.js
path.resolve(root,'config/config.js)
самое простое решение-использовать путь.resolve. Если вы только даете относительные пути к path.resolve
тогда предполагается, что они относятся к текущему рабочему каталогу, т. е. корню проекта. Так что все, что вам нужно, это:
const path = require('path');
path.resolve('config/config.js');