избегая ../../../../../../ ..
Не все в приложении должным образом принадлежит общедоступному 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.