избегая ../../../../../../ ..
Не все в приложении должным образом принадлежит общедоступному npm, и накладные расходы на настройку частного npm или git-репо все еще довольно велики во многих случаях. Вот несколько подходов, позволяющих избежать
../../../../../../../
проблемы относительных путей.
node_modules
Иногда люди возражают против помещения модулей приложения в node_modules, потому что не очевидно, как проверять ваши внутренние модули без проверки сторонних модулей из npm.
Ответ довольно прост! Если у вас есть .gitignore
файл, который игнорирует node_modules
:
node_modules
Вы можете просто добавить исключение !
для каждого из ваших внутренних модулей приложения:
node_modules/*
!node_modules/foo
!node_modules/bar
Обратите внимание, что вы не можете игнорировать подкаталог, если родительский объект уже проигнорирован. Таким образом, вместо игнорирования node_modules
, вы должны игнорировать каждый каталог внутри node_modules
с помощью
node_modules/*
хитрости, а затем вы можете добавить свои исключения.
Теперь в любом месте вашего приложения вы сможете иметь require('foo')
или require('bar')
не иметь очень большой и хрупкий относительный путь.
Если у вас много модулей и вы хотите, чтобы они были более отделены от сторонних модулей, установленных npm, вы можете просто поместить их все в каталог, node_modules
например node_modules/app
:
node_modules/app/foo
node_modules/app/bar
Теперь вы сможете require('app/foo')
или require('app/bar')
из любого места в приложении.
В вашем .gitignore
, просто добавьте исключение для node_modules/app
:
node_modules/*
!node_modules/app
Если ваше приложение сконфигурировало преобразования в package.json, вам нужно создать отдельный package.json со своим собственным полем transform в вашем каталоге node_modules/foo
или node_modules/app/foo
каталоге компонентов, потому что преобразования не применяются через границы модуля. Это сделает ваши модули более устойчивыми к изменениям конфигурации в вашем приложении, и будет проще самостоятельно повторно использовать пакеты за пределами вашего приложения.
символическая
Еще одна удобная уловка, если вы работаете с приложением, в котором вы можете создавать символические ссылки и вам не требуется поддержка окон, - это создать символическую ссылку на папку lib/
или app/
папку node_modules
. Из корня проекта выполните:
ln -s ../lib node_modules/app
и теперь из любой точки вашего проекта вы сможете запрашивать файлы lib/
, выполняя процедуру require('app/foo.js')
получения lib/foo.js
.
пользовательские пути
Вы можете увидеть некоторые места, где говорится об использовании $NODE_PATH
переменной окружения или opts.paths
о добавлении каталогов для узла и просмотра страниц для поиска модулей.
В отличие от большинства других платформ, использование массива каталогов путей в стиле оболочки $NODE_PATH
не так выгодно в узле по сравнению с эффективным использованием node_modules
каталога.
Это связано с тем, что ваше приложение более тесно связано с конфигурацией среды выполнения, поэтому имеется больше движущихся частей, и ваше приложение будет работать только при правильной настройке среды.
узел и browserify оба поддерживают, но препятствуют использованию
$NODE_PATH
.