Как правильно собрать Docker с помощью nodejs / ts? - PullRequest
0 голосов
/ 31 октября 2019

Пару дней пытался запустить проект в prod, и он просто продолжает показывать разные ошибки. Последний (надеюсь):

> rimraf dist && tsc -p tsconfig.build.json
tsc-watch/test/fixtures/failing.ts(2,1): error TS1005: '}' expected.

Но tsconfig.build.json в порядке:

{
  "extends": "./tsconfig.json",
  "exclude": ["node_modules", "dist", "test", "**/*spec.ts"]
}

Это происходит после того, как я пытаюсь построить / запустить контейнер докера с: docker-compose up --force-recreate --build

Вот что у меня есть в Dockerfile:

FROM node:11-stretch
ADD ./* $HOME/
RUN npm install
RUN npm run build
CMD npm run start:prod

И package.json

{
  "name": "mvp-api",
  "private": true,
  "version": "0.0.1",
  "description": "MVP API",
  "license": "MIT",
  "scripts": {
    "build": "rimraf dist && tsc -p tsconfig.build.json",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "ts-node -r tsconfig-paths/register src/main.ts",
    "start:dev": "tsc-watch -p tsconfig.build.json --onSuccess \"node dist/main.js\"",
    "start:debug": "tsc-watch -p tsconfig.build.json --onSuccess \"node --inspect-brk dist/main.js\"",
    "start:prod": "node dist/main.js",
    "lint": "tslint -p tsconfig.json -c tslint.json",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },
  "dependencies": {
    "@nestjs/common": "^6.5.3",
    "@nestjs/core": "^6.5.3",
    "@nestjs/jwt": "^6.1.1",
    "@nestjs/microservices": "^6.0.4",
    "@nestjs/passport": "^6.1.0",
    "@nestjs/platform-express": "^6.0.4",
    "@nestjs/swagger": "^3.1.0",
    "@nestjs/typeorm": "^6.1.3",
    "@nestjs/websockets": "^6.0.4",
    "@nestrx/twilio": "0.0.2",
    "@types/mailgun-js": "^0.22.3",
    "@types/qrcode": "^1.3.4",
    "aws-sdk": "^2.513.0",
    "cache-manager": "^2.10.0",
    "cache-manager-mongodb": "^0.2.1",
    "cache-manager-redis-store": "^1.5.0",
    "class-transformer": "^0.2.3",
    "class-validator": "^0.10.0",
    "dotenv": "^8.0.0",
    "hbs": "^4.0.4",
    "is-base64": "^0.1.0",
    "libphonenumber-js": "^1.7.22",
    "mailgun-js": "^0.22.0",
    "mysql": "^2.17.1",
    "nestjs-config": "^1.4.3",
    "onesignal-node": "^2.1.1",
    "passport": "^0.4.0",
    "passport-jwt": "^4.0.0",
    "qrcode": "^1.4.1",
    "randomstring": "^1.1.5",
    "reflect-metadata": "0.1.13",
    "rimraf": "2.6.3",
    "rxjs": "6.4.0",
    "swagger-ui-express": "^4.0.7",
    "twilio": "^3.33.4",
    "typeorm": "^0.2.18",
    "vcard-generator": "0.0.7"
  },
  "devDependencies": {
    "@nestjs/testing": "6.1.1",
    "@types/cache-manager": "^2.10.0",
    "@types/express": "4.16.1",
    "@types/jest": "24.0.11",
    "@types/node": "11.13.4",
    "@types/randomstring": "^1.1.6",
    "@types/supertest": "2.0.7",
    "jest": "24.7.1",
    "prettier": "1.17.0",
    "supertest": "4.0.2",
    "ts-jest": "24.0.2",
    "ts-loader": "^6.0.4",
    "ts-node": "8.1.0",
    "tsc-watch": "2.2.1",
    "tsconfig-paths": "3.8.0",
    "tslint": "5.16.0",
    "typescript": "3.4.3",
    "webpack": "^4.39.2",
    "webpack-cli": "^3.3.6",
    "webpack-node-externals": "^1.7.2"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".spec.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}

Раньше он прекрасно работал с этими конфигурациями, но после очистки всех контейнеров / изображений и попытки воссоздать все, что просто не работает.

Кто-нибудь знает, как заставить его правильно работать в prod?

1 Ответ

0 голосов
/ 01 ноября 2019

Очевидно, проблема была в том, что node_modules продолжали копировать.

Добавление файла .dockerignore со следующим содержимым решает проблему:

node_modules

Теперь я могу успешно запустить Docker-контейнер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...