【问题标题】:gcloud App Engine Flexible Strangeness with Docker and BabelDocker 和 Babel 的 gcloud App Engine 灵活怪异
【发布时间】:2017-06-04 22:55:17
【问题描述】:

几个月来,我一直在将服务器端节点应用程序部署到自定义应用程序引擎运行时,没有任何问题。唯一有趣的一点是,当我构建容器时,它会针对源代码运行 babel。

在过去的几周里,这一直在间歇性地失败,并在远程构建日志中出现错误。

import * as deps from './AppFactory';
SyntaxError: Unexpected token import

让我相信没有发生 babel transpilation;尽管 gcloud cli 表明它是:

> node_modules/babel-cli/bin/babel.js src/ -d dist/

src/AppFactory.js -> dist/AppFactory.js
src/Ddl.js -> dist/Ddl.js
src/Helpers.js -> dist/Helpers.js
src/MemoryResolver.js -> dist/MemoryResolver.js
src/Mysql.js -> dist/Mysql.js
src/Schema.js -> dist/Schema.js
src/index.js -> dist/index.js
 ---> 0282c805d5c9

无奈之下,我整理出 ​​Dockerfile 中的 dist/index 文件。当我这样做时,我看到确实没有发生转译。

当我在本地创建 docker 映像时,一切正常。

我的 Dockerfile 如下:

# Set the base image to Ubuntu
FROM    gcr.io/google_appengine/nodejs:latest

ENV NODE_ENV production

# File Author / Maintainer
# Provides cached layer for node_modules
ADD package.json /tmp/package.json
RUN cd /tmp && npm install
RUN mkdir -p /src && cp -a /tmp/node_modules /src/

# Define working directory
WORKDIR /src
ADD . /src

RUN npm run deploy
RUN cat /src/dist/index.js

CMD ["npm", "start"]

下面是我的 .babelrc 文件:

{
  "presets": [
    "es2015",
  ]
}

还有我的原版 yaml 文件:

service: metrics-api-test
runtime: custom
env: flex
env_variables:
  NODE_ENV: 'production'
  NODEPORT: '8080'
beta_settings:
  cloud_sql_instances: pwc-sales-demos:us-east1:pawc-sales-demos-sql

我一直在尝试 babel-register、babel-node 的各种变体。当我构建本地 docker 映像时,它们都可以正常工作。当我部署到应用引擎时,它们都失败了。

几个月前我发布了这个问题,这个问题又开始困扰我了。它开始是一个间歇性问题,现在每次都会发生。它发生在服务之间,甚至发生在不同的 gcloud 项目上。

对此的任何见解都会得到我的赞赏和 150 分。

【问题讨论】:

  • 你可以发布 package.json 文件吗
  • 据我所知,在 Google 服务器上构建的映像使用您提供的相同 Dockerfile。如果 Babel 转译发生在映像构建期间,则它必须发生在您在此处发布的 Dockerfile 的某个步骤中,因为基础映像 gcr.io/google_appengine/nodejs 不执行任何转译。 babel 转译是否发生在您的npm install 命令或npm run deploy 期间?如前所述,查看您的 package.json. 会很有帮助
  • 是的。包文件不再处于该状态。我几乎 100% 确定我已将所有 babel 依赖项正确移动到正常依赖项,而不是 dev。如果可以,我会再次尝试重温。
  • 或者,如果您 push your own images to the Container Registry 并使用 gcloud app deploy --image-url=<your-gcr-url>,您可以继续在本地构建 docker 镜像。

标签: node.js google-app-engine babeljs gcloud


【解决方案1】:

所以终于回到了这个;这完全是我的错。

我还以为我已经把所有的 babel 依赖都移到了运行时依赖 strophe 中,像这样:

"dependencies": {
    "babel-cli": "^6.24.1",
    "babel-preset-es2015": "^6.24.1"....

但我一定没有。一切都与上述和这个 Dockerfile 完美配合:

FROM    gcr.io/google_appengine/nodejs:latest

ENV NODE_ENV production

# File Author / Maintainer
# Provides cached layer for node_modules
ADD package.json /tmp/package.json
RUN cd /tmp && npm install
RUN mkdir -p /src && cp -a /tmp/node_modules /src/

# Define working directory
WORKDIR /src
ADD . /src

RUN node_modules/babel-cli/bin/babel.js src/ -d dist/
RUN cat dist/index.js
CMD ["npm", "start"]

不再需要手动构建文件!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 2020-11-23
    • 2018-07-15
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多