Docker 和 Babel 的 gcloud App Engine Flexible Strangeness
gcloud App Engine Flexible Strangeness with Docker and Babel
几个月来,我一直在将服务器端节点应用程序部署到自定义应用程序引擎 运行,没有任何问题。关于它的唯一有趣的事情是 运行 在我构建容器时针对源代码的 babel。
在过去的几周里,这一直间歇性地失败,并在远程构建日志中出现与此相关的错误。
import * as deps from './AppFactory';
SyntaxError: Unexpected token import
让我相信 babel 转译并没有发生;虽然 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 分。
终于回到这个话题了;这完全是我的错。
我原以为我已经将所有 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"]
不再手动构建文件!
几个月来,我一直在将服务器端节点应用程序部署到自定义应用程序引擎 运行,没有任何问题。关于它的唯一有趣的事情是 运行 在我构建容器时针对源代码的 babel。
在过去的几周里,这一直间歇性地失败,并在远程构建日志中出现与此相关的错误。
import * as deps from './AppFactory';
SyntaxError: Unexpected token import
让我相信 babel 转译并没有发生;虽然 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 分。
终于回到这个话题了;这完全是我的错。
我原以为我已经将所有 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"]
不再手动构建文件!