0

我正在使用 Bluemix DevOps Pipelines 将 Node.js 应用程序作为 Cloud Foundry 应用程序部署到 Bluemix。它正在使用sdk-for-nodejs buildback(虽然我没有指定,但它正在检测package.json文件)。

暂存应用程序需要很长时间。查看日志,这是因为它似乎正在运行npm install。但是,我已经设置了我的管道,以便npm install在早期阶段调用,并且要部署的构建工件已经包含 installed 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

       > radium@0.18.2 postinstall /tmp/app/node_modules/radium

       > dtrace-provider@0.8.1 install /tmp/app/node_modules/dtrace-provider

       > pre-commit@1.2.2 install /tmp/app/node_modules/pre-commit

       > spawn-sync@1.0.15 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'
...
> spawn-sync@1.0.15 postinstall /tmp/app/node_modules/spawn-sync


> npm run clean && npm run build

> myapp@2.0.0 clean /tmp/app

> myapp@2.0.0 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

> myapp@2.0.0 clean /tmp/app

> myapp@2.0.0 build /tmp/app
> cross-env NODE_ENV=production webpack --config webpack.config.js

这是我的应用程序中我真的不想在部署时运行的脚本。

我已经尝试告诉它运行npm run start:prod- 我怎样才能阻止它运行这些安装步骤?

4

1 回答 1

2

查看 buildpack 代码,我没有看到要禁用的标志npm install

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

选项1

创建一个未列出依赖项的 package_nodependencies.json 文件。在npm install使用常规 package.json 运行构建步骤后,删除 package.json 并将 package_nodependencies.json 重命名为 package.json。

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

npm installcf push 现在应该很快了。确保您的 .cignore 文件中没有 node_modules

选项 2

将所有依赖项移动到 package.json 中的 devDependencies。在构建期间,在没有 PRODUCTION 的情况下运行 npm install

NODE_ENV=开发 npm install

于 2017-05-11T15:29:48.930 回答