微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NodeJS + Typescript + Docker 运行时报错

如何解决NodeJS + Typescript + Docker 运行时报错

我正在尝试在 NodeJS + Typescript 中对接和 Api,但显然当我配置为使用 docker 运行它时,发生了一些奇怪的事情。

如果我尝试使用 ts-node 提供它,例如: NODE_ENV=development ts-node ./dist/src/index.js 工作正常,但我尝试使用 pm2 它抱怨:

SyntaxError: Cannot use import statement outside a module

以下是我的配置:

ecosystem.config.json

{
  "apps": [
    {
      "name": "server","script": "./dist/src/index.js","instances": "max","autorestart": false,"watch": "./dist/**/*.js","env": {
        "NODE_ENV": "development"
      },"env_production": {
        "NODE_ENV": "production"
      }
    },{
      "name": "server-watcher","script": "yarn start","instances": 1,"watch": "tsconfig.json","env_production": {
        "NODE_ENV": "production"
      }
    }
  ]
}

Dockerfile

FROM node:12-alpine

workdir /server

RUN apk add --no-cache bash
RUN npm install -g pm2
RUN npm install -g typescript


ENV NODE_ENV=production

copY package.json tsconfig.json ./

RUN yarn install

copY . ./

RUN yarn build

CMD [ "pm2-runtime","start","ecosystem.config.json","--only=server" ]

docker-compose.yml

version: '3'

services:
  server:
    build: ./
    image: api-server
    restart: always
    volumes: &appvolumes
      - ./src:/server/src
    ports:
      - ${SERVER_PORT}:${SERVER_PORT}
    environment: &appenv
      SERVER_HOST: ${SERVER_HOST}
      BASE_CLIENT_URL: ${BASE_CLIENT_URL}
      SERVER_PORT: ${SERVER_PORT}
      JWT_SECRET: ${JWT_SECRET}
      JWT_ACCESS_EXPIRATION_MINUTES: ${JWT_ACCESS_EXPIRATION_MINUTES}
      DB_TYPE: ${DB_TYPE}
      DB_USERNAME: ${DB_USERNAME}
      DB_PASSWORD: ${DB_PASSWORD}
      DB_HOST: ${DB_HOST}
      DB_PORT: ${DB_PORT}
      DB_NAME: ${DB_NAME}
      FACEBOOK_API_KEY: ${FACEBOOK_API_KEY}
      FACEBOOK_API_SECRET: ${FACEBOOK_API_SECRET}
      FACEBOOK_AUTH_CALLBACK: ${FACEBOOK_AUTH_CALLBACK}
      GMAIL_ACCOUNT_USERNAME: ${GMAIL_ACCOUNT_USERNAME}
      GMAIL_ACCOUNT_PASSWORD: ${GMAIL_ACCOUNT_PASSWORD}
      GMAIL_SMTP_HOST: ${GMAIL_SMTP_HOST}
      TWILIO_ACCOUNT_SID: ${TWILIO_ACCOUNT_SID}
      TWILIO_AUTH_TOKEN: ${TWILIO_AUTH_TOKEN}
      TWILIO_SERVICE_SID: ${TWILIO_SERVICE_SID}
      CLIENT_PORT: ${CLIENT_PORT}
      NODE_ENV: ${NODE_ENV}
      MysqL_ROOT_PASSWORD: ${DB_PASSWORD}
      MysqL_USER: ${DB_USERNAME}
      MysqL_PASSWORD: ${DB_PASSWORD}
      MysqL_DATABASE: ${DB_HOST}

  server_watcher:
    build: ./
    image: api-server
    depends_on:
      - server
    restart: always
    volumes: *appvolumes
    environment: *appenv
    command: ['pm2-runtime','start','ecosystem.config.json','--only=server-watcher']

tsconfig.json

{
  "compilerOptions": {
    "baseUrl": "./","rootDir": ".","outDir": "./dist","lib": ["DOM","es2017"],"module": "commonjs","removeComments": false,"moduleResolution": "node","sourceMap": true,"allowJs": true,"strict": true,"esModuleInterop": true,"experimentalDecorators": true,"allowSyntheticDefaultImports": true,"strictPropertyInitialization": false,"declaration": false,"emitDecoratorMetadata": true,"noImplicitAny": true,"target": "es5","strictnullchecks": true,"typeRoots": ["node_modules/@types"]
  },"include": ["src/**/*"],"exclude": ["node_modues","dist/**/*","src/entities/*","src/**/*.spec.ts"]
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。