Как импортировать разветвленный пакет npm Github в Laravel Mix?

В package.json у меня есть:

"vue-search-select": "github:my-github-account/vue-search-select"

А потом запустить npm install, без ошибок.

В app.js я пытаюсь импортировать разветвленный пакет:

import { ModelSelect } from 'vue-search-select';

Когда я запускаю npm run watch, получаю следующее сообщение:

Module not found: Error: Can't resolve 'vue-search-select'

Обновлено:

Я сравнил исходную версию и разветвленную версию в node_modules: оригинал содержит папку dist, а разветвленная версия не имеет. В github у оригинального тоже нет этой папки. А dist входит в .gitignore.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
0
43
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я понимаю, что для package.json URL-адрес GitHub начиная с версии 1.1.65 вы можете ссылаться на URL-адреса GitHub просто как foo:user/foo-project, как видел здесь.

Но я бы все равно рекомендовал вместо этого более полный URL:

git+ssh://user@hostname:project.git#commit-ish
git+ssh://user@hostname/project.git#commit-ish
git+http://user@hostname/project/blah.git#commit-ish
git+https://user@hostname/project/blah.git#commit-ish

Таким образом, вы контролируете схему (HTTPS или SSH) и можете проверить, какие учетные данные (кэшированное имя пользователя/пароль для HTTPS или закрытый ключ для SSH) используются.

ОП Уилсон комментирует в обсуждение, что добавление dist/ в репо может быть вариантом, как здесь.
prepare сценарий можно объявить в package.json, например Вот этот.

  "scripts": {
    "build": "tsc",
    "prepare": "npm run build"
  },

Как отмечено в отвечать Уилсона

the important thing is that the prepare script is added in forked package, not in the project that using the package.

Спасибо. Но я запустил npm install без ошибок. И я могу проверить, что код в node_modules/vue-multiselect соответствует разветвленной версии. Кажется, foo:user/foo-project работает нормально?

Wilson 22.03.2022 09:30

@Wilson Странно, если установка работает, что-то еще должно вызвать ошибку Module not found

VonC 22.03.2022 09:36

Я сравнил исходную версию и разветвленную версию в node_modules: оригинал содержит папку dist, а разветвленная версия не имеет. В github у оригинального тоже нет этой папки. А dist входит в .gitignore.

Wilson 22.03.2022 09:47

Должен ли я удалить dist в .gitignore?

Wilson 22.03.2022 09:49

@Wilson dist обычно игнорируется (github.com/github/gitignore/blob/…), поэтому его следует игнорировать.

VonC 22.03.2022 09:51

Но я не знаю, как решить эту проблему. Думаю, причина в том, что папка dist есть только в npm, а не в github.

Wilson 22.03.2022 09:57

Содержимое дистрибутива @Wilson должно быть регенерировано, поэтому оно не имеет версии (плюс, репозиторий Git не подходит для больших двоичных файлов)

VonC 22.03.2022 10:14

Но он не восстанавливается, когда я бегу npm run watch / npm install

Wilson 22.03.2022 10:17

Давайте продолжить обсуждение в чате.

VonC 22.03.2022 10:26

Наконец, я нашел решение:

Добавьте "prepare": "npm run lib:build" (или что-то еще, зависит от того, как собрать пакет, можете проверить это в package.json) в scripts из package.json в разветвленном пакете. И пушить на гитхаб.

Затем в проекте, использующем разветвленный пакет, просто оставьте "package-name": "github:my-github-account/package-name" в package.json и снова запустите npm install. Никаких других изменений.

Да, я упомянул сценарий подготовки в своем собственном отредактированном ответе.

VonC 22.03.2022 15:17

@VonC Спасибо, я думаю, что важно то, что скрипт prepare добавляется в разветвленный пакет, а не в проект, использующий пакет. Сначала я ошибся.

Wilson 22.03.2022 15:24

Хороший вопрос и проголосовал. Я отредактировал свой ответ, чтобы сделать это более ясным.

VonC 22.03.2022 15:26

Другие вопросы по теме