我已經將服務器端節點應用程序部署到定製應用程序引擎運行時間幾個月沒有任何問題。關於它的唯一一件有趣的事情是,當我建造容器時,會碰到源頭。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分。
是否可以發佈package.json文件 –
據我所知,構建在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
是的。包文件不再處於該狀態。我接近100%肯定我已經將所有babel依賴關係正確地移至正常的依賴關係,而不是dev。我會盡力在可以的時候再次訪問。 –