2017-01-20 10 views
4

私は数カ月間サーバーサイドノードアプリケーションをカスタムアプリケーションエンジンランタイムに問題なく展開しています。それに関する興味深いのは、私がコンテナを作ったときのソースに対する実行バーベルだけです。gcloud App Engine DockerとBabelによる柔軟な奇妙さ

この数週間で、これは間欠的に失敗し、リモートビルドログにこのエラーが発生しました。

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とのバリエーション。ローカルのドッカー画像を作成すると、それらはすべて完全に機能します。私がアプリケーションエンジンにデプロイすると、それらはすべて失敗します。

私は数ヶ月前にこれを掲載しましたが、問題は再び私を悩ますようになり始めています。それは断続的な問題として始まり、毎回発生します。それはサービス間でも、異なるgcloudプロジェクトでさえも起こります。

これについての洞察は、私の感謝と150ポイントを得ます。

+0

あなたはpackage.jsonファイルを投稿できます –

+0

私の知っている限り、Googleサーバー上に構築された画像は、あなたが提供する同じDockerファイルを使用します。イメージビルディング中にバベルの蒸散が発生した場合、Dockerfileのいくつかのステップでここに投稿したベースイメージ[gcr.io/google_appengine/nodejs](https://github.com/GoogleCloudPlatform/nodejs) -docker/blob/master/base/Dockerfile)は、トランジレーションを実行しません。あなたの 'npm install'コマンドまたは' npm run deploy'コマンドの実行中にバベルの翻訳が行われますか?前に述べたように、あなたの** package.json **を見ることは役に立ちます。 – Nicholas

+0

はい。パッケージファイルはその状態になりません。私は100%に近いと確信しています。私はすべてのbabelの依存関係をdevに比べて正常な依存関係に適切に移動させました。私はできる時にこれをもう一度見直そうとします。 –

答えて

0

最後にこれに戻ります。それはまったく私のせいだった。

私はそうのように、私は実行時の依存関係の詩句にすべてのバベルの依存関係を移動していたことを考えていた:

"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"] 

ファイルを手動でビルドすることはもうありません。

関連する問題