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