#node.js #npm #npm-install
#node.js #npm #npm-install
Вопрос:
Я ищу способ установить модуль или репозиторий GitHub в текущий каталог, а не помещать его в node_modules
папку. Например:
npm install gituser/hismodule
Установит hismodule
и зависимости внутри node_modules
. Но я хочу поместить модуль в текущий каталог и поместить его зависимости только внутри node_modules
.
Это также может быть сделано двумя командами. Один для установки модуля и один для установки зависимостей. Есть ли способ сделать это?
Пока я ничего не нашел. Единственный возможный обходной путь для меня — использовать wget
для загрузки zip
файла с GitHub и использовать unzip
. Но я хотел бы сделать это с помощью известного идентификатора…
Ответ №1:
Я не думаю, что вы можете сделать это через npm, и я не думаю, что это правильно. Подмодули git больше подходят для чего-то подобного. Вы можете определить репозиторий git как подмодуль вашего репозитория, и каждый раз, когда вы клонируете основной репозиторий, он также будет клонировать подмодуль. Они действительно хорошо работают вместе. Вы можете ознакомиться с этой официальной документацией:
https://git-scm.com/book/en/v2/Git-Tools-Submodules
Эта статья также весьма полезна:
Концепция подмодулей великолепна. По сути, это позволяет вам подключать внешний репозиторий внутри другого репозитория по определенному пути. Чтобы проиллюстрировать ценность подмодулей, мне, вероятно, будет полезно объяснить, как я их использую.
https://chrisjean.com/git-submodules-adding-using-removing-and-updating/
Обновить
Вы можете иметь что-то подобное вместо того, чтобы предоставлять им zip-файл. Создайте файл package.json и передайте его им. Там добавьте в качестве зависимости свой root и также определите сценарий postinstall. Что-то вроде этого:
{
"name": "your-dummy-packagejson",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"postinstall": "mv node_modules/your-project ."
},
"author": "",
"license": "ISC",
"dependencies": {
"your-project-dependency": "1.0.0"
}
}
- Они сохраняют этот package.json на своем ПК
- Они запускают установку npm
- После установки запустится перехват postinstall и он выполнит
mv node_modules/your-project .
команду. - Ваш проект готов 🙂
Комментарии:
1. Спасибо за ваш ответ. Я думаю, что подмодуль для этого не подходит. Я попытаюсь объяснить, что я хочу: модуль предназначен
root
для других проектов. Подумайте об этом как о фреймворке. Но я хочу простой способ / команду для разработчиков, чтобы установить его из github. Да, тогда можно было бы загрузить, извлечь и удалить zip-архив, но я хотел бы простоnpm
выполнить илиnode
выполнить эту работу…2. @eisbehr ‘Мне нужен простой способ / команда для разработчиков, чтобы установить его из github’, означает ли это, что вы не хотите, чтобы разработчики клонировали репозиторий из github?
3. Нет, я говорю, что не все разработчики тоже знакомы
git
. 😉 Но пока это было бы лучшей идеей…4. Поскольку это проект с открытым исходным кодом, у меня нет ресурсов для этого. 😉
5. У меня была такая же идея, как и у вас. Но это имеет больше последствий, как я и думал. Like
mv
не будет копироватьdot
файлы. Вы могли бы исправить это, используяshopt -s dotglob
в своей команде. Но другое дело, что значение модуля будет изменено, что не очень хорошо для дальнейшего использования.package.json
npm install
Но я рад, что у кого-то еще были те же идеи, что и у меня.
Ответ №2:
Вы могли бы попробовать использовать опцию prefix:
npm install --prefix <path/to/prefix_folder> -g
Комментарии:
1. Спасибо за ваш ответ. Но
--prefix
только перемещаетnode_modules
его в другую папку. Он имеет тот же результат, что и обычная установка, только в другой подкаталог.