Как требовать глубоких вложенных модулей 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');