#npm #yarnpkg
#npm #yarnpkg
Вопрос:
У меня есть репозиторий с приложением и модулями. Модули включаются в приложение package.json
подобным:
"application-module": "file:../modules/application-module"
После yarn install
добавления этой зависимости в node_modules
.
Я хочу создать приложение на основе модуля. app
папка воспроизводит корневой модуль. Другие модули, такие как admin-panel-module
, account-module
должны быть в modules
папке. Итак, приложение может иметь не только node_modules
внутреннюю, но и modules
папку для модулей. Эти модули будут добавлены git subtree
из другого репозитория. Итак, таким образом, я могу разрабатывать независимо
Есть ли какой-либо способ избежать добавления и использования локальных каталогов?
Комментарии:
1. Какое конкретное поведение вы имеете в виду под «локальными каталогами»?
2. @Sergeon
repository-folder(-app, -modules)
Я хочу использоватьmodules
insideapp
, инициализировать новое приложение React и быть счастливым3. Итак, в основном вы хотите вместо этого
node_modules
переименоваться вmodules
? Почему (если это так)?4. @Sergeon позвольте мне объяснить. Я хочу создать приложение на основе модуля.
app
папка воспроизводит корневой модуль. Другие модули, такие какadmin-panel-module
,account-module
должны быть вmodules
папке. Итак,app
может иметьnode_modules
внутри, но также иmodules
папку для модулей. Эти модули будут добавленыgit subtree
из другого репозитория. Итак, таким образом, я могу разрабатывать независимо5. Кажется, теперь я это понимаю. Итак, у вас есть
app/
а затем некоторые модули, специфичные для вашего приложения, такие какaccount-module
илиadmin-module
. Вы хотите иметьnode_modules
inapp/
, который обрабатывает все общие зависимости, но затем, еслиadmin-module
у него есть зависимость, специфичная для него самого, вы не хотите размещать эту зависимость вnode_modules
локальном для этого модуля. Это верно?
Ответ №1:
Несколько node_modules и package.json
В любом проекте node / npm у вас может быть несколько package.json
в вашем дереве каталогов, например:
app/
package.json
node_modules
src...
account_module/
package.json
node_modules
src...
admin_module/
package.json
node_modules
src..
При вызове yarn
(или npm install
ofc) любого из дочерних модулей зависимости, перечисленные в их local package.json
, будут установлены в локальной папке node_modules.
Таким образом, в принципе, вы можете решить свою проблему, гарантируя, что у каждого дочернего элемента есть свой собственный package.json
со своими зависимостями.
Тем не менее, вы можете разместить общие зависимости в корневой app
папке. Например, если все ваши проекты используют lodash
, вы можете поместить lodash
зависимость в add package_json
. После выполнения yarn
в app
папке lodash
пакет будет установлен в node_modules
приложении.
После этого, если вы:
require('lodash');
В любом из дочерних элементов они будут искать lodash
в node_modules
папке приложения, если они не найдут lodash
в своей собственной node_modules
.
Если у вас нет root node_modules
, вы все равно можете объявить package.json
local для любого из подмодулей, и у них будут свои собственные node_modules
.
Итак, возможно, вы захотите вообще избежать общих зависимостей, или, может быть, вы хотите сохранить общие зависимости в app
папке. В Npm вы рассмотрели оба способа.
Однако, если вы не хотите обрабатывать общие зависимости, но обеспокоены необходимостью хранить много дублированных пакетов на локальных компьютерах, вы можете использовать pnpm, который является оболочкой поверх npm, позволяющей сэкономить много места на локальных компьютерах разработки.
Комментарии:
1. Большое спасибо за столь подробный ответ. Очень полезно
Ответ №2:
У меня (почти) такая же проблема с yarn.
Я создал пакет (typescript) под названием «test». В этом пакете после сборки в основном 3 каталога: dist (после сборки), node_modules и src.
Затем я создал другой пакет «test2» и в этот пакет добавил «test» в качестве зависимости «yarn add c:/…/…/test «. Пакет правильно установлен в node_module test2. НО в «test2/node_modules /test» я могу найти node_modules из test ( «test2/node_modules/test/node_modules». Почему? Это значительно увеличивает размер пакета.
В обоих tsconfig.json (test и test2) node_modules исключен…
спасибо