如何解决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
以下是我的配置:
{
"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 举报,一经查实,本站将立刻删除。