[node.js] 특정 버전의 Git에서 npm 설치

비공개로 유지하고 싶은 Node.js 용 모듈을 작성했다고 가정합니다. 나는 줄을 추가 할 수 있어야한다는 것을 알고있다.

"private": "true"

받는 package.json파일, 그리고 나 또한 알고 내가 할 수있는 npm install파일 시스템 경로 또는 GitHub의를 포함하여 자식 저장소에 대한 링크를 사용하여이 모듈.

또한 파일 시스템 경로 또는 git repo에 대한 링크를로 넣을 수 package.json있으므로 dependencies부분이 다음과 같이 보일 수 있습니다.

"dependencies": {
  "myprivatemodule": "git@github.com:..."
}

내가 지금 원하는 것은 최신 버전에 연결하는 것이 아니라 특정 버전에 연결하는 것입니다. 내가 아는 유일한 가능성은 ID를 사용하여 특정 커밋에 연결하는 것입니다. 그러나 이것은와 같은 버전 번호를 사용하는 것보다 읽기 쉽고 유지 관리하기가 쉽지 않습니다 0.3.1.

그래서 내 질문은 : 어쨌든 그러한 버전 번호를 지정하고 npm 이이 버전을 포함하는 최신 커밋에 대한 자식 저장소를 검색 할 수 있습니까?

그렇지 않은 경우 프로젝트에서이 문제를 어떻게 해결합니까? 커밋 ID로 살고 있습니까? 아니면 더 나은 해결책이 있습니까?



답변

의존성이 (가)에서 사용할 수 있습니다 registry것만으로 설치 될 지정하는 version기술자를 .

프로젝트를 공개적으로 공유해서는 안되는 대신 자신의 레지스트리작성하고 사용할 수 있습니다 registry.npmjs.org.

그러나 레지스트리에 없으면 URL 또는 Git URL 로 참조해야합니다 . Git URL로 버전을 지정하려면 <commit-ish>끝에 태그와 같은 적절한을 URL 조각으로 포함하십시오 .

예를 들어, 이름이 0.3.1다음 과 같은 태그의 경우 :

"dependencies": {
  "myprivatemodule": "git@github.com:...#0.3.1"
}

참고 : 위의 스 니펫은 질문에 게시 된 것과 동일한 기본 URL을 보여줍니다.

스니핑 부분 ( ...)은 다음과 같이 채워야합니다.

"myprivatemodule": "git@github.com:{owner}/{project}.git#0.3.1"

SSH 액세스를 사용할 수없는 경우 다른 주소 형식이 필요합니다.

"myprivatemodule": "git://github.com/{owner}/{project}.git#0.3.1"

OS에 따라 linkGithub에서 복제 한 다른 폴더의 종속성에 의존 할 수도 있습니다 .


답변

받아 들인 대답이 효과가 없었습니다. github에서 패키지를 가져 오기 위해하고있는 일은 다음과 같습니다.

npm install --save "git://github.com/username/package.git#commit"

또는 package.json에 수동으로 추가하십시오.

"dependencies": {
  "package": "git://github.com/username/package.git#commit"
}


답변

버전별로 태그 또는 릴리스를 의미하는 경우 github은 해당 링크에 대한 다운로드 링크를 제공합니다. 예를 들어 가져 오기 버전 0.3.2 (npm에서는 사용할 수 없음) 를 설치하려면 package.json아래에 추가하십시오 dependencies.

"fetch": "https://github.com/github/fetch/archive/v0.3.2.tar.gz",

커밋 해시 접근 방식과 비교할 때 유일한 단점은 해시가 변경된 코드를 나타내지 않지만 태그를 교체 할 수 있다는 것입니다. 고맙게도 이것은 거의 발생하지 않습니다.

최신 정보:

요즘 내가 사용하는 접근 방식은 GitHub에서 제공하는 종속성에 대한 간단한 표기법입니다.

"dependencies": {
  "package": "github:username/package#commit"
}

커밋은 태그와 같은 커밋이 될 수 있습니다. GitHub의 경우 초기 값 github:이므로 기본값을 삭제할 수 있습니다 .


답변

위의 @qubyte에 대한 내 예제 주석이 잘려서 읽을 수있는 내용이 있습니다 …

위에서 설명한 @surjikal 방법 은 브랜치 커밋에 작동하지만 포함하려고 시도한 트리 커밋 에는 작동하지 않았습니다 .


보관 모드는 커밋에도 작동합니다. 예를 들어, fetch @ a2fbf83

npm :

npm install  https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz

원사 :

yarn add  https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz

형식 :

 https://github.com/<owner>/<repo>/archive/<commit-id>.tar.gz


모드 가 필요한 트리 커밋은
다음과 같습니다 /archive/.

yarn add  https://github.com/vuejs/vuex/archive/c3626f779b8ea902789dd1c4417cb7d7ef09b557.tar.gz

관련 vuex 커밋


답변

이 명령 username/package은 특정 git commit에서 npm 패키지 를 설치합니다 .

npm install https://github.com/username/package#3d0a21cc

여기에 3d0a21cc첫 번째 해시를 커밋의 8 자입니다.


답변

여기서는 실행할 때 직면 한 문제에 대해 설명 npm install합니다. 패키지가 나타나지 않습니다 node_modules.

문제는 설치된 패키지 의 namepackage.json이 가져온 패키지의 이름과 다릅니다 ( package.json내 프로젝트의 키 ).

따라서 설치된 프로젝트 이름이 some-package(이름 값 package.json) 인 경우 package.json프로젝트에 다음을 작성하십시오 "some-package": "owner/some-repo#tag".


답변

tfjs-core 의 두 가지 버전을 실행해야했으며 둘 다 설치 후 빌드해야한다는 것을 알았습니다.

package.json :

"dependencies": {
  "tfjs-core-0.14.3": "git://github.com/tensorflow/tfjs-core#bb0a830b3bda1461327f083ceb3f889117209db2",
  "tfjs-core-1.1.0": "git://github.com/tensorflow/tfjs-core#220660ed8b9a252f9d0847a4f4e3c76ba5188669"
}

그때:

cd node_modules/tfjs-core-0.14.3 && yarn install && yarn build-npm && cd ../../
cd node_modules/tfjs-core-1.1.0  && yarn install && yarn build-npm && cd ../../

마지막으로 라이브러리를 사용하려면

import * as tf0143 from '../node_modules/tfjs-core-0.14.3/dist/tf-core.min.js';
import * as tf110 from '../node_modules/tfjs-core-1.1.0/dist/tf-core.min.js';

이것은 훌륭하게 작동했지만 가장 확실합니다.