2017-01-20 50 views
4

我已經將服務器端節點應用程序部署到定製應用程序引擎運行時間幾個月沒有任何問題。關於它的唯一一件有趣的事情是,當我建造容器時,會碰到源頭。gcloud App引擎與Docker和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 

我一直在嘗試各種巴貝爾註冊,巴貝爾節點的變化。當我構建本地碼頭圖像時,它們都能很好地工作。當我部署到應用引擎時,它們都會失敗。

幾個月前我發佈了這個問題,這個問題開始困擾着我。它開始時是一個間歇性問題,現在每次都會發生。它發生在服務之間,甚至在不同的gcloud項目中。

任何對此的深入瞭解都會得到我的讚賞和150分。

+0

是否可以發佈package.json文件 –

+0

據我所知,構建在Google服務器上的圖像使用您提供的相同Dockerfile。如果Babel transpilation在圖像構建過程中發生,那麼在您作爲基礎圖像發佈的Dockerfile的某個步驟中必須發生這種情況[gcr.io/google_appengine/nodejs](https://github.com/GoogleCloudPlatform/nodejs -docker/blob/master/base/Dockerfile)不執行任何轉發。 babel transpilation是否在你的'npm install'命令或'npm run deploy'中發生?如前所述,看到你的** package.json **會有所幫助。 – Nicholas

+0

是的。包文件不再處於該狀態。我接近100%肯定我已經將所有babel依賴關係正確地移至正常的依賴關係,而不是dev。我會盡力在可以的時候再次訪問。 –

回答

0

所以最後回到這個;這完全是我的錯。

我原以爲我已經感動了所有通天依賴到運行時依賴的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"] 

沒有更多的手動構建文件!