package.json에서 git URL을 사용하는 분기 또는 태그에 의존합니까?


399

버그 수정이있는 노드 모듈을 분기했으며 기능 수정 지점에서 버그 수정이 병합 및 릴리스 될 때까지 고정 버전을 사용하고 싶다고 가정 해 보겠습니다.

어떻게 내 고정 된 버전을 참조하는 것이 dependencies내의 package.json?

답변:


569

로부터 NPM 워드 프로세서 :

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

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

NPM 버전 1.1.65부터 다음을 수행 할 수 있습니다.

<user>/<project>#<branch>

130
npm 1.1.65부터 Github URL이 더 간결 할 수 있습니다 user/project. npmjs.org/doc/files/package.json.html 다음 과 같이 분기를 첨부 할 수 있습니다user/project#branch
dantheta

2
git://github.com/<user>/<project>.git#feature/blah일을하지만 <user>/<project>.git#feature/blah...하지 않았다 아마 정규 표현식을 요구 받아 더 진보 할 수 feature/blah고려. 이것은 npm입니다v1.4.28
pulkitsinghal

5
버전 번호는 어떻게 포함합니까?
Richard

1
@hurrymaplelad 풀 요청에 대해 동일한 작업을 수행 할 수 있습니까? 그렇다면 명령은 어떻습니까?
roundrobin

3
업데이트 된 NPM 문서 링크 docs.npmjs.com/files/package.json#github-urls
kellen

136

@dantheta의 의견에 따라 :

npm 1.1.65부터 Github URL은 더 간결한 사용자 / 프로젝트가 될 수 있습니다. npmjs.org/doc/files/package.json.html user / project # branch와 같이 브랜치를 연결할 수 있습니다

그래서

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

또는 jscs의 태그 v1.12.0의 경우 :

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

npm --save를 사용하면 더 긴 자식을 얻을 수 있습니다.

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

의존성으로 Git URL

힘내 URL은 다음과 같은 형식 일 수 있습니다.

git : //github.com/user/project.git#commit-ish 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

commit-ish는 git checkout의 인수로 제공 할 수있는 모든 태그, sha 또는 분기 일 수 있습니다. 디폴트는 master입니다.

GitHub URL

버전 1.1.65부터는 GitHub URL을 "foo": "user / foo-project"로 나타낼 수 있습니다. 자식 URL과 마찬가지로 커밋-쉬미 접미사를 포함 할 수 있습니다. 예를 들면 다음과 같습니다.

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


2
커밋 sha1에 따라, 특히 제어 할 수없는 저장소에 의존하는 경우 선호되는 옵션이어야합니다. Git 브랜치와 태그는 변경할 수 없으며 (삭제 / 변경, 악의적 / 우연히) sha1 충돌을 만드는 것은 (거의) 불가능합니다.
jakub.g

1
commit-ish에 대한 브랜치와 커밋을 가질 수 있습니까?
munchschair

45

사용 devel하거나 feature분기하거나 NPM 레지스트리에 특정 패키지를 게시하지 않았거나 개인 모듈이기 때문에 패키지를 게시 할 수없는 경우 다음 git://에서 버전 번호 대신 URI를 가리킬 수 있습니다 package.json.

"dependencies": {
   "public": "git://github.com/user/repo.git#ref",
   "private": "git+ssh://git@github.com:user/repo.git#ref"
}

#ref부분은 선택적이며 분지 될 수있다 (같은 master) 태그 (같은 0.0.1), 또는 일부 또는 전체 이드 커밋.


26

최신 버전의 NPM에서는 다음을 수행 할 수 있습니다.

npm install gitAuthor/gitRepo#tag

리포지토리가 유효한 NPM 패키지 인 경우 package.json에서 다음과 같이 자동 별칭이 지정됩니다.

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

이것을 @justingordon의 답변에 추가 할 수 있다면 지금은 수동 앨리어싱이 필요하지 않습니다!


4
아닙니다. 잘못 설치되었습니다. 어떻게 든 그것은 저장소의 전체 디렉토리 구조를 포함하지 않으며 package.json, yarn.lock, readme 및 license와 같은 일부 파일 만 포함합니다. src 또는 dist 폴더가 없습니다.
StalkAlex

@StalkAlex docs.npmjs.com/cli/publish를 작성한 다음 빌드 스크립트에 대해 설치할 저장소를 확인하십시오. 어쩌면 태그가 붙어 있거나 사후 설치가 효과가 없을 수도 있습니다. 어쨌든 특정 패키지의 문제입니다.
vortex

@vortex 감사합니다. 태그를 지정하면 정확히 무엇을 의미합니까? 어떻게 이런 문제가 발생합니까?
StalkAlex

0

그것이 누군가를 돕는다면, 위의 모든 것을 시도했지만 (https w / token mode) 여전히 아무것도 작동하지 않았습니다. 오류가 없지만 node_modules 또는 package_lock.json에 아무것도 설치되지 않습니다. repo 이름이나 사용자 이름 등의 토큰이나 문자를 변경하면 오류가 발생합니다. 그래서 올바른 토큰과 리포 이름을 가지고 있다는 것을 알았습니다.

마침내 내 package.json에있는 종속성의 이름이 내가 가져 오려고하는 repo의 package.json의 이름과 일치하지 않기 때문에 그것이 깨달았습니다. npm install --verbose조차도 아무런 문제가 없다고 말합니다. 오류가없는 종속성을 무시하는 것 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.