2013-03-07 3 views
3

Как обновить non-npm-package в моем пакете перед установкой?Использование подмодулей git без npm-пакетов в пакетах npm

Я использую git и имею модуль node.js, который зависит от внешнего проекта, размещенного в репозитории git. Я добавил внешний проект в качестве подмодуля, и теперь я пытаюсь сделать пакет npm.

Поскольку внешняя зависимость не является пакет NPM (ни модуль узла), я думаю, что я не могу использовать npm submodule команды, поэтому я придумал this Preinstall сценарий в package.json файле:

"scripts": { "preinstall" : "git submodule update --init"} 

Когда Я исполняю npm install в директории пакета, он отлично работает, но когда я пытаюсь установить пакет непосредственно из моего удаленного хранилища мерзавца или тарболе сделал с npm pack, я получаю следующее сообщение об ошибке:

 
You need to run this command from the toplevel of the working tree. 

я также пытался (как сказано в сообщении об ошибке):

"scripts": { "preinstall" : "cd $(git rev-parse --show-toplevel) && git submodule update --init"} 

Это один не показывает никаких ошибок, но и не обновляет подмодуль в каталоге пакета.

Любая помощь будет оценена по достоинству.

ответ

1

Загруженный npm, после его извлечения, больше не содержит информацию о git (нет каталога .git).

Так что никакая команда git не будет работать таким образом, но работает локально, потому что у вас есть информация о git.

Что касается решения, возможно, вам придется создать сценарий, который делает то, что делает npm pack, но не игнорирует подмодули.

Не то, что я пытался, но этот сценарий https://github.com/Kentzo/git-archive-all может быть работа из коробки с чем-то вроде

git-archive-all --prefix package/ module.tgz 

Может потребоваться некоторые хитрости ...

+0

Вы уверены, что извлеченный пакет не есть каталог '.git'? Если это так, я должен иметь возможность инициализировать репозиторий 'git', и поскольку' .gitmodules' уже существует, я могу просто обновить git 'subodules'. – fardjad

+0

Я уверен. .git не является частью файла 'npm pack'. Запуск 'git init' может работать. Стоит сделать снимок. Как потребитель в npm, я не уверен, что мне бы хотелось получить другой код для данной версии, но если это для вашего собственного использования, и вы в порядке с этим, то уверен. –

+2

Я попробовал 'git init', и он инициализировал пустой репозиторий git. Но мне пришлось снова добавить «подмодули» вручную; Кажется, что '.gitmodules' в репозитории недостаточно для' git' для распознавания 'подмодулей'. Наконец, я сменил сценарий предварительной установки пакета на 'git clone git: // path/to/remote/repo', а также добавил имя удаленного каталога репозитория в' .npmignore', и теперь все работает нормально. – fardjad

Смежные вопросы