我已经将服务器端节点应用程序部署到自定义应用程序引擎运行时几个月而没有任何问题.关于它的唯一一个有趣的事情是,当我建造容器时,一个奔跑的宝贝反对来源.
在过去的几周里,这种情况在远程构建日志中间歇性地失败并出现此错误.
import * as deps from './AppFactory';
SyntaxError: Unexpected token import
让我相信巴贝尔的翻译没有发生;虽然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文件.当我这样做时,我发现确实没有发生转化.
当我在本地创建一个泊坞窗图像时,一切都很完美.
我的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镜像时,它们都能完美地工作.当我部署到app引擎时,它们都会失败.
几个月前我发布了这个问题,这个问题又开始困扰我了.它起初是一个间歇性问题,现在每次都会发生.它发生在服务之间,甚至发生在不同的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"]
不再手动构建文件!