have a problem in writing typescript server app and compiling it into js for production.
TLDR - https://github.com/kricha/ts-server-test
index.ts
'use strict';
import {Server, Socket} from "socket.io";
import {App} from '@tinyhttp/app';
import {logger} from './logger';
import * as fs from 'fs';
if (!fs.existsSync('./src/test.ts')) {
    logger.error(`NOK: No  ./src/test.ts`);
}
const port = 3000;
const app = new App();
const s1 = app
    .get('/', (_, res) => void res.send('<h1>Hello World</h1>'))
    .listen(port, () => console.log(`Started on http://localhost:${port}!`));
;
const io = new Server(s1, {
    cors: {
        origin: 'localhost',
        methods: ["GET", "POST"],
        credentials: true
    }
});
io.on("connection", (socket: Socket) => {
    // ...
});
logger.info('OK: end.');
console.log('end.');
logger.ts
'use strict'
import Log4js from 'log4js';
Log4js.configure({
    appenders: {
        predictive: {
            type: 'dateFile',
            filename: 'log/predictive.log',
            pattern: 'yyyy-MM-dd',
            compress: true,
            daysToKeep: 14,
            layout: {
                type: 'pattern',
                pattern: '%d{yy-MM-dd hh:mm:ss.SSS} [%p] %m',
            },
        },
        out: {
            type: 'stdout',
            layout: {
                type: 'pattern',
                pattern: '%[%d{yy-MM-dd hh:mm:ss.SSS} [%p]%] %m',
            },
        },
        file_log: {
            type: 'logLevelFilter',
            level: 'all',
            appender: 'predictive',
        },
        console_log: {
            type: 'logLevelFilter',
            level: 'info',
            appender: 'out',
        },
    },
    categories: {
        default: {appenders: ['file_log', 'console_log'], level: 'all'},
    },
    pm2: true,
});
export const logger = Log4js.getLogger();
package.json
{
  "type": "module",
  "devDependencies": {
    "@types/node": "^16.11.12",
    "ts-node": "^10.4.0",
    "tsm": "^2.2.1",
    "typescript": "^4.5.3"
  },
  "dependencies": {
    "@tinyhttp/app": "^2.0.13",
    "log4js": "^6.3.0",
    "socket.io": "^4.4.0"
  }
}
tsconfig.json
{
    "compilerOptions": {
      "rootDir": "src",
      "outDir": "dist",
      "target": "es5",
      "lib": [
        "es2020", "DOM"
      ],
      "module": "ESNext", // (A)
      "moduleResolution": "node", // (B)
      "esModuleInterop": true,
      "strict": true,
    //   "sourceMap": true,
    //   // Needed for CommonJS modules
      "allowSyntheticDefaultImports": true, // (C)
    //   //
      "declaration": true,
    }
  }
My problems:
- Can't use require (maybe this is ok, i just need to readjust
 - tsc compiling files to js not properly (it skips .js in import, and i can't run with just 
node dist/index.js) 
So:
Just running: node dist/index.js
node:internal/errors:464
    ErrorCaptureStackTrace(err);
    ^
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/app/dist/logger' imported from /app/dist/index.js
    at new NodeError (node:internal/errors:371:5)
    at finalizeResolution (node:internal/modules/esm/resolve:416:11)
    at moduleResolve (node:internal/modules/esm/resolve:932:10)
    at defaultResolve (node:internal/modules/esm/resolve:1044:11)
    at ESMLoader.resolve (node:internal/modules/esm/loader:422:30)
    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:222:40)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:76:40)
    at link (node:internal/modules/esm/module_job:75:36) {
  code: 'ERR_MODULE_NOT_FOUND'
}
Running: node --experimental-specifier-resolution=node dist/index.js is OK:
21-12-11 20:56:00.508 [ERROR] NOK: No  ./src/test.ts
21-12-11 20:56:00.528 [INFO] OK: end.
end.
Started on http://localhost:3000!
Running: node --loader tsm src/index.ts is OK:
(node:31) ExperimentalWarning: --experimental-loader is an experimental feature. This feature could change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
(node:31) DeprecationWarning: Obsolete loader hook(s) supplied and will be ignored: getFormat, transformSource
21-12-11 20:57:36.931 [ERROR] NOK: No  ./src/test.ts
21-12-11 20:57:36.948 [INFO] OK: end.
end.
Started on http://localhost:3000!
So, questions:
- maybe need to do some changes in tsconfig.json for better compiling?
 - maybe i do something VERY wrong in scripts code?
 - for prod it will be running in docker with pm2, is it ok?
 
For fast test run use github.. All this code is just for example.
Thanks!