Depende de uma ramificação ou marca usando uma URL git em um package.json?

399

Digamos que eu tenha bifurcado um módulo de nó com uma correção de bug e quero usar minha versão fixa, obviamente, em uma ramificação de recursos, até que a correção seja mesclada e liberada.

Como eu referenciaria minha versão fixa na dependenciesminha package.json?

hurrymaplelad
fonte

Respostas:

569

Nos documentos da npm :

git://github.com/<user>/<project>.git#<branch>

git://github.com/<user>/<project>.git#feature\/<branch>

No NPM versão 1.1.65, você pode fazer o seguinte:

<user>/<project>#<branch>
hurrymaplelad
fonte
130
A partir da npm 1.1.65, o URL do Github pode ser mais conciso user/project. npmjs.org/doc/files/package.json.html Você pode anexar o ramo comouser/project#branch
dantheta
2
git://github.com/<user>/<project>.git#feature/blahfuncionou mas <user>/<project>.git#feature/blahnão ... talvez o regex deles precise ser mais avançado para levar feature/blahem consideração. Isso foi npmv1.4.28
pulkitsinghal
5
Como você inclui o número da versão?
Richard
11
@hurrymaplelad posso fazer o mesmo para solicitação pull? Se sim, como está o comando?
roundrobin
3
Documentos atualizados do NPM link docs.npmjs.com/files/package.json#github-urls
kellen
136

por comentário de @ dantheta:

A partir da npm 1.1.65, o URL do Github pode ser um usuário / projeto mais conciso. npmjs.org/doc/files/package.json.html Você pode anexar a ramificação como user / project # branch

assim

"babel-eslint": "babel/babel-eslint",

Ou para a tag v1.12.0 em jscs:

"jscs": "jscs-dev/node-jscs#v1.12.0",

Observe que, se você usar o npm --save, obterá o git mais longo

Em https://docs.npmjs.com/files/package.json#git-urls-as-dependencies

URLs Git como dependências

Os URLs Git podem ter a forma:

git: //github.com/user/project.git#commit-ish git + ssh: // usuário @ nome do host: 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

O commit-ish pode ser qualquer tag, sha ou ramificação que possa ser fornecida como um argumento para o git checkout. O padrão é mestre.

URLs do GitHub

Na versão 1.1.65, você pode consultar os URLs do GitHub como "foo": "user / foo-project". Assim como nos URLs git, um sufixo commit-ish pode ser incluído. Por exemplo:

{"name": "foo",
"version": "0.0.0",
"dependences": {"express": "visionmedia / express", "mocha": "visionmedia / mocha # 4727d357ea"}}

justingordon
fonte
2
Dependendo de uma confirmação, sha1 deve ser a opção preferida, principalmente se você depende de um repositório que não esteja sob seu controle. As ramificações e tags do Git não são imutáveis ​​(podem ser excluídas / alteradas, maliciosamente / por acidente), enquanto é (quase) impossível criar uma colisão sha1.
Jakub.g 16/05
11
posso ter um branch E um commit para commit-ish?
munchschair
45

Se você deseja usar develou featureramificar ou não publicou um determinado pacote no registro do NPM, ou não pode, porque é um módulo privado, pode apontar para um git://URI em vez de um número de versão no seu package.json:

"dependencies": {
   "public": "git://github.com/user/repo.git#ref",
   "private": "git+ssh://[email protected]:user/repo.git#ref"
}

A #refparte é opcional e pode ser um ramo (como master), tag (como 0.0.1) ou um ID de confirmação parcial ou total.

Fizer Khan
fonte
26

Na versão mais recente do NPM, você pode:

npm install gitAuthor/gitRepo#tag

Se o repositório for um pacote NPM válido, ele será automaticamente aliasado no package.json como:

{ "NPMPackageName": "gitAuthor/gitRepo#tag" }

Se você puder adicionar isso à resposta de @justingordon, não há necessidade de aliasing manual agora!

vórtice
fonte
4
não é não. Ele é instalado incorretamente. De alguma forma, ele não inclui toda a estrutura de diretórios do repositório, apenas alguns arquivos como package.json, yarn.lock, leia-me e licença. Não há pastas src ou dist.
StalkAlex
@StalkAlex docs.npmjs.com/cli/publish e verifique o repo que você está instalando para os scripts de compilação. Talvez eles estejam marcados ou a pós-instalação não funcione para você, é um problema para esse pacote específico, de qualquer maneira, espero que isso ajude!
vórtice
Obrigado vortex, o que você quer dizer exatamente com marcação? Como isso cria esse problema?
precisa saber é o seguinte
0

Se isso ajuda alguém, eu tentei de tudo acima (modo https w / token) - e ainda nada estava funcionando. Não obtive erros, mas nada seria instalado no node_modules ou no package_lock.json. Se eu alterasse o token ou qualquer letra no nome do repo ou nome de usuário etc. - eu receberia um erro. Então eu sabia que tinha o token correto e o nome do repositório.

Finalmente percebi que é porque o nome da dependência que tinha no meu package.json não correspondia ao nome no package.json do repositório que estava tentando obter. Mesmo o npm install --verbose não diz que há algum problema. Parece apenas ignorar a dependência sem erro.

MattS
fonte