Есть ли способ просто загрузить модуль в текущий каталог с помощью node / npm?

#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 его в другую папку. Он имеет тот же результат, что и обычная установка, только в другой подкаталог.