2013-05-17 3 views
5

вместо require код относительно, т.е. начиная с ./ или .., я бы хотел определить модуль «глобально». Например, возьмем следующую структуру пакета:как определить файл как модуль в node.js

/src 
    /index.js 
    /a.js 
    /b.js 
/lib 
    /index.js 
    ... 

Когда в src/a.js или src/b.js, требовать lib, я должен был бы сделать require('../lib') каждый раз. Это становится раздражающим, когда вы начинаете вложить больше, поскольку вам придется вручную разрешить ../lib или ../../lib или ../../../lib.

я хочу иметь возможность сделать require('lib'). Я могу сделать это? Или я должен просто использовать глобальные переменные?

+1

нашел это: https://github.com/nadav-dav/rekuire, но я не смотрел на него. –

+0

Если вы добавите родительский каталог 'lib' в переменную среды' NODE_PATH', вы можете потребовать его, как если бы он был установлен глобально. – robertklep

+0

, так что в принципе, я могу просто установить свой cwd как 'NODE_PATH', и я могу' require ('lib') '? –

ответ

0

размещения модуля в node_modules не требуют вам включить путь или относительный путь

EDIT:

если поместить файл с именем package.json внутри директории модуля, узел будет пытаться разобрать этот файл и искать и использовать основной атрибут как относительный путь для точки входа. Например, если ваш

./myModuleDir/package.json

файл выглядит примерно следующим, узел будет пытаться загрузить файл с пути

./myModuleDir /lib/myModule.js

:

{ 
"name" : "myModule", 
"main" : "./lib/myModule.js" 
} 

Если в этой папке нет файла определения пакета с именем package.json, точка ввода пакета будет принимать значение по умолчанию index.js, а в этом случае Node будет искать файл по пути ./ myModuleDir/index.js.

+0

то я не могу зафиксировать код, потому что у меня есть node_modules в моем .gitignore –

+0

-1: node_modules не создан для этой цели. Ввод кода внутри node_modules - очень уродливая и плохая практика. node_modules - это место для сторонних модулей. –

0

Использование не относительного пути, требующего, чтобы исходные файлы не соответствовали потребностям узла. Не пытайтесь обойти это ограничение, разместив произвольный код в каталоге node_modules или обходным путем, изменив переменную окружения NODE_PATH.

Если вы хотите использовать запрос без пути, вы должны извлечь требуемый код в качестве узла и зависеть от этого узла. Это приводит к улучшению структурированного кода, менее сложным модулям, инкапсулированной функциональности, лучшей тестируемости и простому повторному использованию кода.

Вы можете включать зависимости пакетов от http или git, поэтому нет необходимости публиковать модули узлов, которые вы используете в npm. Взгляните на npm dependencies для более подробной информации.

+0

Причина, по которой я задавал этот вопрос, состоял в том, что я изучал добавление dep как подмодуля ... но я быстро сдался. тем не менее, все еще интересуется ответом на этот вопрос. –

0

использовать module.exports в файле index.js. и поместите его в папку node_modules

+0

, тогда я не могу зафиксировать код, потому что у меня есть node_modules в моем .gitignore –

+0

. Folder_modules папка должна быть в корневой папке –

+0

Я предполагаю, что вы не знаете, что такое gitignore –

0

Если относительный путь раздражает вас, и вы хотите использовать lib всегда в своем приложении, вы можете использовать переменную global, как эта.

var lib = require('./lib'); 
global.lib = lib; 

вы можете установить lib глобальной переменной в вашей точке входа.после этого вы можете получить доступ только к lib. , но это глобальный глобальный масштаб. поэтому вы должны тщательно использовать.

Смежные вопросы