npm을 통해 설치된 노드 모듈을 편집하는 방법은 무엇입니까?


124

차례로 validator 모듈을 사용하는 node_swiz 모듈을 사용하고 있습니다.

유효성 검사기 모듈을 변경하고 싶지만 npm 설치를 사용하여 모듈 / 종속성을 설치했습니다.

node_modules 내부의 유효성 검사기 모듈을 변경할 수 있습니까? 아니면 heroku에 게시하거나 다음에 npm install을 실행할 때 node_modules 종속성이 다시 생성되고 최신 버전이 생성됩니까?

구조는 다음과 같습니다.

myNodeApplication
  - node_modules
     - swiz
         - node_modules
            - validator [this is the library I want to edit]

도와 주셔서 감사합니다!

답변:


243

파일을 직접 편집 할 수 있지만 npm이 업데이트 될 때마다 덮어 쓰게됩니다. 가장 좋은 방법은 소스로 바로 이동하는 것입니다.

변경 사항이 전체 모듈의 기능에 영향을 미치고 다른 사용자에게 유용 할 수있는 경우 github의 원본 소스에 기여하고 구현할 변경 사항을 찾을 수 있습니다.

이것이 필요한 독점 기능이고 모듈 개발에 도움이되지 않는 경우 가장 좋은 방법은 github에서 포크하고 변경하는 것입니다. NPM을 사용하여 github에서 직접 항목을 설치할 수 있으며이 방법을 사용하면 원래 소스의 사용자 지정 버전에 향후 변경 사항을 통합 할 수 있습니다.

github에서 직접 설치하려면 다음 명령을 사용하십시오.

npm install https://github.com/<username>/<repository>/tarball/master


2
감사! 그게 바로 제가 알고 싶었던 것입니다. 또한 이것을 읽는 다른 사람들을 위해 ... 저는 package.json 파일에 내 github에있는 모듈을 포함하고 싶었습니다. 여기에 대한 정보가 있습니다. stackoverflow.com/a/8306715/1810875
user1810875

22
포크하기 전에 로컬 시스템에서 변경하고 있지만 변경 사항이 영향을 미치지 않는 것 같습니다. node_modules / package_name / lib / file_name.js 인 자바 스크립트 파일을 변경하면 영향을 줍니까?
호기심 많은

1
변경 사항이 있는지 확실하지 않지만 개인적으로 Git URL을 git : //github.com/ <user> / <package> .git로 지정해야했습니다. "
Craig

5
@JohnDevor 사용자 정의 된 모듈을 설치하는 대신 "npm link"명령을 사용하여 해당 폴더에 대한 심볼릭 링크를 만듭니다. docs.npmjs.com/cli/link
Venryx

3
그것을 알아 냈고, 폴더로 이동하여 /node_modules실행 npm install해야했습니다.
아담 Moisa

6

patch-package 를 사용하여 노드 모듈을 변경하고 유지할 수 있습니다 .

먼저 내부 패키지를 변경 node_modules한 다음 <package name>방금 변경 한 패키지의 이름을 사용하여 다음 명령을 실행하면 됩니다.

npx patch-package <package name>

그런 다음 patch-package는 patches변경 사항을 나타내는 파일이 있는 폴더 를 만듭니다 . 그런 다음이 파일을 git에 커밋 할 수 있으며 나중에 실행하여 npx patch-package(인수없이) 패치를 복원 할 수 있습니다 .

선택 단계 :

"npm install"을 실행할 때 종속성을 자동으로 패치하려면 package.json의 스크립트 섹션에 다음을 추가하십시오.

"postinstall": "npx patch-package" 

1
문제없이 나를 위해 일한 아주 좋은 솔루션.
ヨハンソン

이것은 정말 멋지다! 참고 : 패치가 종속성의 postinstall 스크립트에 대한 것이기 때문에 "postinstall"대신 "preinstall"을 사용해야했습니다. 설치 후 단계에서 적용해야하는 다른 패치가 있다면 어떻게 구현 하시겠습니까?
Superole

1
놀라운 대답은 netlify에 배포하기 전에 dep를 수정해야했습니다. 사전 설치 'npx patch-package'는 매직 티켓이었습니다. 이제 적절한 이미지가 웹 사이트에 표시됩니다.
TheBetterJORT

1

새 모듈을 게시하고 싶지 않았고 npm install변경 사항을 덮어 쓰고 싶지도 않았습니다 . 이 두 가지 문제에 대한 해결책을 찾았지만 @Sdedelbrock의 조언을받는 것이 더 나을 것입니다. 하지만 원하는 경우 방법은 다음과 같습니다.

  1. package.json파일을 편집하여 편집 하려는 종속성을 제거하십시오.
  2. 프로젝트 /node_modules로 이동하여 커밋 할 수있는 저장소의 다른 곳으로 폴더를 이동합니다. 그래서 지금 /node_modules/dependency/dependency
  3. cd 종속성 디렉토리에 입력하고 npm link
  4. cd프로젝트 디렉토리의 루트에 입력 하고 npm link dependency 외부에서이 작업을 수행하는 것이 중요합니다./node_modules/dependency

모든 것이 작동했다면 이제 /node_modules/dependency. 이제 프로젝트를 실행하여 작동하는지 확인할 수 있습니다.

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