Недавние node docs говорят, что изменение require.paths
- это плохая практика. Что мне делать вместо этого?
Nodejs - что использовать вместо require.paths?
Ответ 1
Я считаю, что проблема заключается в том, что ее можно многократно модифицировать во время выполнения, а не просто устанавливать. Это, очевидно, может ввести в заблуждение и вызывает некоторые довольно странные ошибки. Кроме того, если отдельные пакеты изменяют путь, результаты применяются глобально, что очень плохо и противоречит модульной природе node.
Если у вас несколько собственных путей к библиотеке, лучшим решением является установка переменной среды NODE_PATH перед запуском node. Node затем выбирает это при запуске и автоматически применяет его.
Ответ 2
Я держу связанные модели в одном и том же каталоге или поддиректории, используя:
var x = require('./mod/x');
В случае, если это внешний модуль, я устанавливаю его с помощью npm, который правильно устанавливает модуль в NODE_PATH.
Я никогда не менял require.paths.
Ответ 3
посмотрите https://github.com/patrick-steele-idem/app-module-path-node; вы можете добавить каталог в операторы require
на верхнем уровне, не влияя на пути подмодулей.
Ответ 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