Heroku에서 node.js에 대한 기본 시작 지침을 따르십시오.
https://devcenter.heroku.com/categories/nodejs
이 명령어는 .gitignore node_modules를 생성하도록 지시하지 않으므로 node_modules를 git에 체크인해야 함을 의미합니다. git에 node_modules를 포함 시키면 시작하는 응용 프로그램이 올바르게 실행되었습니다.
더 고급 예를 따르면 :
https://devcenter.heroku.com/articles/realtime-polyglot-app-node-ruby-mongodb-socketio
https://github.com/mongolab/tractorpush-server (소스)
gitgitore에 node_modules를 추가하도록 지시했습니다. 그래서 git에서 node_modules를 제거하고 .gitignore에 추가 한 다음 다시 배포했습니다. 이번에는 배포가 실패했습니다.
-----> Heroku receiving push
-----> Node.js app detected
-----> Resolving engine versions
Using Node.js version: 0.8.2
Using npm version: 1.0.106
-----> Fetching Node.js binaries
-----> Vendoring node into slug
-----> Installing dependencies with npm
Error: npm doesn't work with node v0.8.2
Required: node@0.4 || 0.5 || 0.6
at /tmp/node-npm-5iGk/bin/npm-cli.js:57:23
at Object.<anonymous> (/tmp/node-npm-5iGk/bin/npm-cli.js:77:3)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:362:17)
at require (module.js:378:17)
at Object.<anonymous> (/tmp/node-npm-5iGk/cli.js:2:1)
at Module._compile (module.js:449:26)
Error: npm doesn't work with node v0.8.2
Required: node@0.4 || 0.5 || 0.6
at /tmp/node-npm-5iGk/bin/npm-cli.js:57:23
at Object.<anonymous> (/tmp/node-npm-5iGk/bin/npm-cli.js:77:3)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:362:17)
at require (module.js:378:17)
at Object.<anonymous> (/tmp/node-npm-5iGk/cli.js:2:1)
at Module._compile (module.js:449:26)
Dependencies installed
-----> Discovering process types
Procfile declares types -> mongod, redis, web
-----> Compiled slug size is 5.0MB
-----> Launching... done, v9
“heroku ps”를 실행하면 충돌이 확인됩니다. 문제 없습니다. 변경 사항을 롤백하고 node_module을 git 저장소에 다시 추가하고 .gitignore에서 제거했습니다. 그러나 되 돌린 후에도 배포시 여전히 동일한 오류 메시지가 표시되지만 이제 응용 프로그램이 다시 올바르게 실행 중입니다. “heroku ps”를 실행하면 응용 프로그램이 실행되고 있음을 알 수 있습니다.
그래서 내 질문은 이것을하는 올바른 방법은 무엇입니까? node_modules 포함 여부 롤백 할 때 왜 여전히 오류 메시지가 표시됩니까? 내 생각에 git 저장소가 Heroku 쪽의 상태가 좋지 않습니까?
답변
두 번째 업데이트
더 이상 FAQ를 사용할 수 없습니다.
의 문서에서 shrinkwrap
:
패키지에 포함 된 특정 바이트를 잠 그려면 (예 : 배포 또는 빌드를 재현 할 수 있음을 100 % 확신하려면) 소스 제어에 대한 종속성을 확인하거나 확인할 수있는 다른 메커니즘을 찾아야합니다. 버전이 아닌 컨텐츠.
Shannon과 Steven은 이것을 전에 언급했지만, 나는 그것이 대답의 일부라고 생각합니다.
최신 정보
아래 권장 사항에 대한 소스 가 업데이 트되었습니다 . 더 이상 node_modules
폴더를 커밋 할 것을 권장하지 않습니다 .
보통은 아닙니다. npm이 패키지의 종속성을 해결하도록 허용하십시오.
웹 사이트 및 앱과 같이 배포하는 패키지의 경우 npm shrinkwrap을 사용하여 전체 종속성 트리를 잠 가야합니다.
원본 게시물
참고로, npm FAQ는 귀하의 질문에 명확하게 답변합니다 :
웹 사이트 및 앱과 같이 배포하는 항목에 대해서는 node_modules를 git로 확인하십시오. 재사용 할 라이브러리 및 모듈에 대해서는 node_modules를 git에 체크인하지 마십시오. npm을 사용하여 개발 환경에서는 종속성을 관리하지만 배포 스크립트에서는 종속성을 관리하지 않습니다.
이것에 대한 좋은 근거는 Mikeal Rogers의 게시물을 읽으 십시오 .
출처 : https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git
답변
git에 체크인 하지 않는 것에 대한 나의 가장 큰 관심 node_modules
은 프로덕션 응용 프로그램이 여전히 사용 중일 때 npm이 없을 수 있다는 10 년의 길입니다. 또는 npm이 손상 될 수 있습니다. 또는 관리자가 저장소에서 의존하는 라이브러리를 제거하기로 결정할 수 있습니다. 또는 사용중인 버전이 잘릴 수 있습니다.
maven과 같은 repo 관리자를 사용하면 항상 자신의 로컬 Nexus 또는 Artifactory를 사용하여 사용하는 패키지로 미러를 유지할 수 있기 때문에 완화 할 수 있습니다. 내가 이해하는 한, 그러한 시스템은 npm에 존재하지 않습니다. Bower 및 Jamjs와 같은 클라이언트 측 라이브러리 관리자도 마찬가지입니다.
파일을 자신의 git repo에 커밋 한 경우 원하는 경우 파일을 업데이트 할 수 있으며 반복 가능한 빌드와 일부 타사 작업으로 인해 앱이 중단되지 않는다는 지식이 편안합니다.
답변
당신은해야합니다 포함되지 node_modules
귀하의 .gitignore
(또는 오히려 당신이 포함되어야 node_modules
소스에 Heroku가 배포).
만약 node_modules
:
- 존재 한 후
npm install
그 vendored libs와 사용하고 어떤 이진 종속성을 다시 작성합니다npm rebuild
. - 존재하지 않는 다음
npm install
슬러그 컴파일 단계로 시간을 추가 모든 종속성 자체를 가져올 것입니다.
Node.js 빌드 팩 소스를 참조하십시오. 정확한 단계 하십시오.
그러나 원래 오류는 버전 간의 비 호환성으로 보이는 npm
와 node
. 이러한 상황을 피하기 위해이 안내서 에 따라 engines
섹션 을 항상 명시 적으로 설정하는 것이 좋습니다 .packages.json
{
"name": "myapp",
"version": "0.0.1",
"engines": {
"node": "0.8.x",
"npm": "1.1.x"
}
}
이것은 dev / prod 패리티를 보장 하고 앞으로 그러한 상황의 가능성을 줄입니다.
답변
이 의견 후에 이것을 남겨 두려고했습니다. 두려고했습니다 .Heroku에서 node.js 앱을 만들 때 git_nodes를 체크인해야합니까?
그러나 stackoverflow는 이상한 형식이었습니다. 동일한 머신이없고 node_modules를 체크인하는 경우 기본 확장에서 .gitignore를 수행하십시오. .gitignore는 다음과 같습니다.
# Ignore native extensions in the node_modules folder (things changed by npm rebuild)
node_modules/**/*.node
node_modules/**/*.o
node_modules/**/*.a
node_modules/**/*.mk
node_modules/**/*.gypi
node_modules/**/*.target
node_modules/**/.deps/
node_modules/**/build/Makefile
node_modules/**/**/build/Makefile
먼저 모든 것을 체크인하여 테스트 한 다음 다른 개발자가 다음을 수행하도록하십시오.
rm -rf node_modules
git checkout -- node_modules
npm rebuild
git status
파일이 변경되지 않았는지 확인하십시오.
답변
npm install
프로덕션 환경에서 실행 하면 안된다고 생각 합니다. 잘못 될 수있는 몇 가지가 있습니다-npm 중단, 최신 종속성 다운로드 (shrinkwrap이 해결 된 것으로 보입니다)는 그 중 두 가지입니다.
반면 node_modules
에 git에 커밋해서는 안됩니다. 크기가 크지 않더라도 커밋을 방해 할 수 있습니다.
가장 좋은 솔루션은 다음과 같습니다. npm install
프로덕션 환경과 유사한 CI 환경에서 실행해야합니다. 모든 테스트가 실행되고 모든 종속성을 포함하는 압축 파일이 생성됩니다.
답변
node_modules 폴더 커밋과 수축 포장을 모두 사용했습니다. 두 솔루션 모두 나를 행복하게 만들지 못했습니다.
간단히 말해 커밋 된 node_modules는 저장소에 너무 많은 노이즈를 추가합니다.
그리고 shrinkwrap.json은 관리가 쉽지 않으며 몇 년 안에 축소 된 프로젝트가 빌드 될 것이라는 보장이 없습니다.
Mozilla가 프로젝트 중 하나에 별도의 저장소를 사용하고 있음을 발견했습니다 https://github.com/mozilla-b2g/gaia-node-modules
따라서이 아이디어를 노드 CLI 도구 https://github.com/bestander/npm-git-lock 에서 구현하는 데 오랜 시간이 걸리지 않았습니다.
모든 빌드 직전에
npm-git-lock –repo [git@bitbucket.org : your / dedicated / node_modules / git / repository.git]를 추가하십시오.
package.json의 해시를 계산하고 원격 저장소에서 node_modules 컨텐츠를 체크 아웃하거나이 package.json의 첫 번째 빌드 인 경우 정리를 수행 npm install
하고 결과를 원격 저장소로 푸시합니다.
답변
나를 위해 일한 것은 package.json ( “npm”: “1.1.x”)에 npm 버전을 명시 적으로 추가하고 node_modules에서 git에 체크인하지 않았습니다. 배포 할 때마다 속도가 느려질 수 있지만 (매번 패키지를 다운로드하므로) 패키지를 체크인 할 때 패키지를 컴파일 할 수 없었습니다. Heroku는 로컬 박스에만 존재하는 파일을 찾고있었습니다.