Programming

package.json의 로컬 종속성

procodes 2020. 2. 23. 12:07
반응형

package.json의 로컬 종속성


그래서, 이런 일을하고 싶지 npm install도 설치 package.json../somelocallib종속성 또는 더 중요한 것은.

"dependencies": {
    "express": "*",
    "../somelocallib": "*"
}

2014 년 9 월 업데이트

이 기능은 npm 버전 2.0.0에서 구현 되었습니다. 예:

{
  "name": "baz",
  "dependencies": {
    "bar": "file:../foo/bar"
  }
}

다음 경로 중 하나도 유효합니다.

../foo/bar
~/foo/bar
./foo/bar
/foo/bar

로컬 패키지는 접두사 ( ) 복사 됩니다 ../node-modules


이전 답변

평소 somelocallib와 같이 의존성을 두십시오 package.json.

"dependencies": {
  "somelocallib": "0.0.x"
}

그런 다음 run npm link ../somelocallib및 npm은 작업중인 버전을 symlink로 설치합니다 .

app@0.0.1 /private/tmp/app
└── somelocallib@0.0.1 -> /private/tmp/somelocallib

참조 : link (1)


이제 로컬 노드 모듈 설치 경로를 package.json직접 지정할 수 있습니다. 문서에서 :

지역 경로

버전 2.0.0부터는 패키지가 포함 된 로컬 디렉토리에 대한 경로를 제공 할 수 있습니다. 지역 경로를 사용하여 저장할 수 있습니다 npm install -S또는 npm install --save, 이러한 양식 중 하나를 사용하여 :

../foo/bar
~/foo/bar
./foo/bar
/foo/bar

이 경우 상대 경로로 정규화되어에 추가됩니다 package.json. 예를 들면 다음과 같습니다.

{
  "name": "baz",
  "dependencies": {
    "bar": "file:../foo/bar"
  }
}

이 기능은 로컬 오프라인 개발 및 외부 서버에 접근하지 않으려는 패키지를 공개 레지스트리에 게시 할 때 사용하지 않아야하는 npm 설치가 필요한 테스트를 만드는 데 유용합니다.


이것은 나를 위해 작동합니다.

package.json 파일에 다음을 배치하십시오.

"scripts": {
    "preinstall": "npm install ../my-own-module/"
}

모듈을 버전 제어로 확인하고 npm 링크를 기억하는 개발자에게 의존하지 않기 때문에 이것을 더 자동화하려면 이것을 package.json "scripts"섹션에 추가하면됩니다.

"scripts": {
    "postinstall": "npm link ../somelocallib",
    "postupdate": "npm link ../somelocallib"
  }

이것은 해키를 넘어선 느낌이지만 "작동"하는 것 같습니다. 이 npm 문제에서 팁을 얻었습니다 : https://github.com/npm/npm/issues/1558#issuecomment-12444454


다음은 로컬 종속성을 추가하는 방법입니다.

npm install file:src/assets/js/FILE_NAME

NPM에서 package.json에 추가하십시오.

npm install --save file:src/assets/js/FILE_NAME

package.json에 다음과 같이 직접 추가하십시오.

....
  "angular2-autosize": "1.0.1",
  "angular2-text-mask": "8.0.2", 
  "animate.css": "3.5.2",
  "LIBRARY_NAME": "file:src/assets/js/FILE_NAME"
....

마스터 프로젝트

마스터 프로젝트에 사용할 package.json은 다음과 같습니다.

"dependencies": {
    "express": "*",
    "somelocallib": "file:./somelocallib"
}

,이 ./somelocallib라이브러리 폴더에 대한 참조입니다 마스터 프로젝트 package.json에 상대적으로가 .

참조 : https://docs.npmjs.com/files/package.json#local-paths


하위 프로젝트

라이브러리 종속성을 처리하십시오.

실행 이외에도 실행 npm install해야합니다 (cd node_modules/somelocallib && npm install).

이것은 NPM의 알려진 버그입니다.

참조 : https://github.com/npm/npm/issues/1341 (보다 최신 참조 참조)


도커에 대한 참고 사항

마스터 package.locksomelocallib/package.lock소스 코드 관리자에 체크인하십시오 .

그런 다음 Dockerfile에서 다음을 사용하십시오.

FROM node:10
WORKDIR /app
# ...
COPY ./package.json ./package-lock.json ./
COPY somelocallib somelocallib
RUN npm ci
RUN (cd node_modules/zkp-utils/ && npm ci)
# ...

나는 작문에 괄호 (cd A && B)를 사용하여 연산을 dem 등원으로 만듭니다.


완벽한 지역 개발을위한 두 단계 :

  1. 패키지가 포함 된 로컬 디렉토리의 경로를 제공하십시오.
  2. 패키지 폴더를 심볼릭 링크

나는 그것이 npm install ../somelocallib작동 한다는 것을 안다 .

그러나 질문에 표시 된 구문이 작동하는지 여부는 알 수 없습니다 package.json...

불행히도 doc 은 URL을 종속성으로 만 언급하는 것 같습니다.

시도 file:///.../...tar.gz압축 지역 lib 디렉토리를 가리키는 ... 그리고 작동하는지 알려주십시오.


이것은 나를 위해 일했습니다 : 먼저 npm 디렉토리에 올바른 사용자가 있는지 확인하십시오

sudo chown -R myuser ~/.npm
sudo chown -R myuser /usr/local/lib/node_modules

그런 다음 package.json에 디렉토리를 연결하십시오.

"scripts": {
 "preinstall": "npm ln mylib ../../path/to/mylib"
}, 
"dependencies": {
  "mylib" : "*"
}

실제로 npm 2.0부터는 현재 로컬 경로가 지원됩니다 ( 여기 참조 ).


Curious ..... 적어도 Windows (내 npm은 3.something)에서해야했습니다.

"dependencies": {
 "body-parser": "^1.17.1",
 "module1": "../module1",
 "module2": "../module2",

내가했을 때 npm install ../module1 --save그것은 문서에 따라 상대 경로가 아닌 절대 경로를 초래했습니다.

나는 조금 더 엉망 ../xxx으로 충분하다고 판단했다 .

특히 로컬 노드 모듈이 d : \ build \ module1, d : \ build \ module2 및 d : \ build \ nodeApp에있는 내 노드 프로젝트 (응용 프로그램)라고 체크 아웃했습니다.

'설치'하기 위해 :

d:\build\module1> rmdir "./node_modules" /q /s && npm install
d:\build\module2> rmdir "./node_modules" /q /s && npm install
d:\build\nodeApp> rmdir "./node_modules" /q /s && npm install

module1의 package.json은 "module2"의 종속성을 갖습니다. "../module2"; module2에는 로컬 종속성이 없습니다. nodeApp에는 "module1": "../module1"및 "module2": "../module2"종속성이 있습니다.

3 개의 폴더 (module1, module2 및 nodeApp)가 모두 같은 수준에 있기 때문에 이것이 나에게만 효과가 있는지 확실하지 않습니다 .......

참고 URL : https://stackoverflow.com/questions/14381898/local-dependency-in-package-json



반응형