В 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
.
Я понимаю, что для 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.
@Wilson Странно, если установка работает, что-то еще должно вызвать ошибку Module not found
Я сравнил исходную версию и разветвленную версию в node_modules
: оригинал содержит папку dist
, а разветвленная версия не имеет. В github у оригинального тоже нет этой папки. А dist
входит в .gitignore
.
Должен ли я удалить dist
в .gitignore
?
@Wilson dist обычно игнорируется (github.com/github/gitignore/blob/…), поэтому его следует игнорировать.
Но я не знаю, как решить эту проблему. Думаю, причина в том, что папка dist
есть только в npm, а не в github.
Содержимое дистрибутива @Wilson должно быть регенерировано, поэтому оно не имеет версии (плюс, репозиторий Git не подходит для больших двоичных файлов)
Но он не восстанавливается, когда я бегу npm run watch
/ npm install
Давайте продолжить обсуждение в чате.
Наконец, я нашел решение:
Добавьте "prepare": "npm run lib:build"
(или что-то еще, зависит от того, как собрать пакет, можете проверить это в package.json
) в scripts
из package.json
в разветвленном пакете. И пушить на гитхаб.
Затем в проекте, использующем разветвленный пакет, просто оставьте "package-name": "github:my-github-account/package-name"
в package.json
и снова запустите npm install
. Никаких других изменений.
Да, я упомянул сценарий подготовки в своем собственном отредактированном ответе.
@VonC Спасибо, я думаю, что важно то, что скрипт prepare
добавляется в разветвленный пакет, а не в проект, использующий пакет. Сначала я ошибся.
Хороший вопрос и проголосовал. Я отредактировал свой ответ, чтобы сделать это более ясным.
Спасибо. Но я запустил
npm install
без ошибок. И я могу проверить, что код вnode_modules/vue-multiselect
соответствует разветвленной версии. Кажется,foo:user/foo-project
работает нормально?