Nodejs - что использовать вместо require.paths?

Недавние node docs говорят, что изменение require.paths - это плохая практика. Что мне делать вместо этого?

Ответ 1

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

Если у вас несколько собственных путей к библиотеке, лучшим решением является установка переменной среды NODE_PATH перед запуском node. Node затем выбирает это при запуске и автоматически применяет его.

Ответ 2

Я держу связанные модели в одном и том же каталоге или поддиректории, используя:

var x = require('./mod/x');

В случае, если это внешний модуль, я устанавливаю его с помощью npm, который правильно устанавливает модуль в NODE_PATH.

Я никогда не менял require.paths.

Ответ 4

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

Что это означает на практике...

Учтите, что у вас есть x/y/z и a/b, а также a/b/c. Если и a/b, и a/b/c зависят от z/y/z, вам в конечном итоге придется либо указать это относительно (require('../../x/y/z') и require('../../../x/y/z') соответственно), либо сделать каждый отдельный пакет node_module. В противном случае вы можете делать ужасные вещи с помощью символических ссылок или тому подобного.

Насколько я могу судить, единственной альтернативой является использование папок вместо пространства имен и организации, используйте такие имена файлов, как:

  • a.b.js
  • a.b.c.js
  • x.y.z.js