2017-05-11 8 views
0

나는 Blueemix DevOps 파이프 라인을 사용하여 Blueemix에 Node.js 앱을 클라우드 파운드리 응용 프로그램으로 배포하고 있습니다. sdk-for-nodejs 빌드 백을 사용하고 있습니다 (지정하지는 않았지만 package.json 파일을 감지하고 있습니다).sdk-for-nodejs buildpack을 사용하여 Bluemix에 앱을 배포 할 때 원하지 않을 때 npm install을 실행합니다. 어떻게 그걸 막을 수 있니?

앱을 실행하는 데 시간이 오래 걸립니다. 로그를 보면 npm install이 실행중인 것 같습니다. 그러나, 내 파이프 라인을 설정하여 npm install이 초기 단계에서 호출되고 배포 될 빌드 아티팩트에 이미 설치된 node_modules이 포함되어 있으므로이를 복구해야한다면 빨리 처리해야합니다. 모든 모듈을 다시 설치하십시오.

내 파이프 라인 배포 사용하는 명령입니다

cf push "${CF_APP}" -c "npm run start:prod" 

내 Procfile이 같은 명령을 포함

web: npm run start:prod 
node: npm run start:prod 

(내가 함께 두 번째없이 모두를 시도했습니다 라인 아래에있는 로그는 두 줄이 모두 포함 된 경우라고 생각합니다.)

실제로 배포 로그의 마지막 부분에는

이 표시됩니다.
App mcp-server was started using this command `npm run start:prod` 

package.json 파일에 그 스크립트는 npm install를 실행하지 않습니다

"scripts": { 
    ... 
    "start:prod": "cross-env NODE_ENV=production node index.js", 

는 모듈을 설치하는 다시 것처럼 보이게 로그는 다음과 같습니다 특히주의의

Staging... 
-----> IBM SDK for Node.js Buildpack v3.11-20170303-1144 
-----> Creating runtime environment 

     NPM_CONFIG_PRODUCTION=true 
     NODE_ENV=production 
     NODE_MODULES_CACHE=true 
-----> Installing binaries 
     engines.npm (package.json): unspecified (use default) 
     Resolving node version >=4 via 'node-version-resolver' 
     Installing IBM SDK for Node.js (4.8.0) from cache 
     Using default npm version: 2.15.11 
-----> Restoring cache 
     Loading 2 from cacheDirectories (default): 
     - node_modules (exists - skipping) 
     - bower_components (not cached - skipping) 
-----> Building dependencies 
     Rebuilding any native modules 

     > [email protected] postinstall /tmp/app/node_modules/radium 

     > [email protected] install /tmp/app/node_modules/dtrace-provider 

     > [email protected] install /tmp/app/node_modules/pre-commit 

     > [email protected] postinstall /tmp/app/node_modules/spawn-sync 
     > node postinstall 


Completed: 0.1% (0.1mb/78.2mb) 
... 
Completed: 99.9% (78.2mb/78.2mb) 
inside extract, run complete 
     Completed: 0.0% (0.0mb/78.2mb) 
Completed: 0.1% (0.0mb/78.2mb) 
Completed: 2.6% (2.0mb/78.2mb) 
Completed: 8.3% (6.5mb/78.2mb) 
Completed: 43.1% (33.7mb/78.2mb) 
Completed: 44.3% (34.7mb/78.2mb) 
Completed: 45.5% (35.6mb/78.2mb) 
Completed: 64.2% (50.2mb/78.2mb) 
Completed: 65.0% (50.8mb/78.2mb) 
Completed: 66.5% (52.1mb/78.2mb) 
Completed: 71.4% (55.8mb/78.2mb) 

     > node-gyp rebuild 

     make: Entering directory `/tmp/app/node_modules/nodejieba/build' 
... 
> [email protected] postinstall /tmp/app/node_modules/spawn-sync 


> npm run clean && npm run build 

> [email protected] clean /tmp/app 

> [email protected] build /tmp/app 
> cross-env NODE_ENV=production webpack --config webpack.config.js 

은 줄 :

Completed: 0.1% (0.1mb/78.2mb) 
... 
Completed: 99.9% (78.2mb/78.2mb) 

나는 아주 천천히 뭔가를 설치하는 것처럼 보이는 곳에 100 줄 넘게 잘 생략했습니다.

또한 : 정말 배치시에 실행하지 않으려는 내 응용 프로그램에서 스크립트입니다

> npm run clean && npm run build 

> [email protected] clean /tmp/app 

> [email protected] build /tmp/app 
> cross-env NODE_ENV=production webpack --config webpack.config.js 

.

이미 npm run start:prod을 실행하도록 알려 주려고했는데 어떻게 설치를 중단 할 수 있습니까?

답변

2

빌드 팩 코드를 보면 npm install을 비활성화하는 플래그가 표시되지 않습니다. 1

https://github.com/cloudfoundry/nodejs-buildpack/blob/master/lib/dependencies.sh#L80

옵션 목록에없는 종속성에 package_nodependencies.json 파일을 만듭니다. 빌드 단계에서 일반 package.json을 사용하여 npm install을 실행 한 후 package.json을 삭제하고 package_nodependencies.json의 이름을 package.json으로 바꿉니다.CF 푸시에

npm install

rm package.json && mv package_nodependencies.json package.json

지금 빨리해야한다. 당신이 당신의 .cfignore 파일

옵션 package.json에 devDependencies 2

이동 모든 종속성을에 node_modules이없는 있는지 확인하십시오. 빌드 중에 npm을 PRODUCTION없이 설치하십시오.

NODE_ENV = 개발 npm 설치