Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't run my Node.js Typescript project TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /app/src/App.ts

When I try to start my app on Heroku I got the following stack trace. It is just a basic ts.app like you see with ts-node and nodemon. If you need any more Infos just tell me that because it's my first post. I am really interested in what the answer is going to be.

2020-05-30T00:03:12.201106+00:00 heroku[web.1]: Starting process with command `npm start` 2020-05-30T00:03:14.405285+00:00 app[web.1]:  2020-05-30T00:03:14.405303+00:00 app[web.1]: > [email protected] start /app 2020-05-30T00:03:14.405303+00:00 app[web.1]: > ts-node src/App.ts 2020-05-30T00:03:14.405304+00:00 app[web.1]:  2020-05-30T00:03:14.833655+00:00 app[web.1]: (node:23) ExperimentalWarning: The ESM module loader is experimental. 2020-05-30T00:03:14.839311+00:00 app[web.1]: TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /app/src/App.ts 2020-05-30T00:03:14.839312+00:00 app[web.1]:     at Loader.defaultGetFormat [as _getFormat] (internal/modules/esm/get_format.js:65:15) 2020-05-30T00:03:14.839314+00:00 app[web.1]:     at Loader.getFormat (internal/modules/esm/loader.js:113:42) 2020-05-30T00:03:14.839315+00:00 app[web.1]:     at Loader.getModuleJob (internal/modules/esm/loader.js:244:31) 2020-05-30T00:03:14.839315+00:00 app[web.1]:     at processTicksAndRejections (internal/process/task_queues.js:97:5) 2020-05-30T00:03:14.839316+00:00 app[web.1]:     at Loader.import (internal/modules/esm/loader.js:178:17) 2020-05-30T00:03:14.847801+00:00 app[web.1]: npm ERR! code ELIFECYCLE 2020-05-30T00:03:14.847998+00:00 app[web.1]: npm ERR! errno 1 2020-05-30T00:03:14.848957+00:00 app[web.1]: npm ERR! [email protected] start: `ts-node src/App.ts` 2020-05-30T00:03:14.849050+00:00 app[web.1]: npm ERR! Exit status 1 2020-05-30T00:03:14.849172+00:00 app[web.1]: npm ERR!  2020-05-30T00:03:14.849254+00:00 app[web.1]: npm ERR! Failed at the [email protected] start script. 2020-05-30T00:03:14.849337+00:00 app[web.1]: npm ERR! This is probably not a problem with npm. There is likely additional logging output above. 2020-05-30T00:03:14.854859+00:00 app[web.1]:  2020-05-30T00:03:14.854998+00:00 app[web.1]: npm ERR! A complete log of this run can be found in: 2020-05-30T00:03:14.855069+00:00 app[web.1]: npm ERR!     /app/.npm/_logs/2020-05-30T00_03_14_850Z-debug.log 2020-05-30T00:03:14.907689+00:00 heroku[web.1]: Process exited with status 1 2020-05-30T00:03:14.943718+00:00 heroku[web.1]: State changed from starting to crashed 

This is my package.json

{    "name": "discordtoornamentmanager",    "version": "1.0.0",    "description": "",    "main": "dist/app.js",    "type": "module",    "scripts": {       "test": "echo \"Error: no test specified\" && exit 1",       "dev": "nodemon -x ts-node src/App.ts",       "start": "ts-node src/App.ts"    },    "keywords": [],    "author": "",    "license": "ISC",    "dependencies": {       "@types/node": "^14.0.5",       "axios": "^0.19.2",       "discord.js": "^12.2.0",       "pg": "^8.2.1",       "reflect-metadata": "^0.1.10",       "typeorm": "0.2.25",       "typescript": "^3.9.3",       "nodemon": "^2.0.4",       "ts-node": "8.10.1"     } } 

And this is my tsconfig

{    "compilerOptions": {       "lib": [          "es6"       ],       "target": "es6",       "module": "commonjs",       "moduleResolution": "node",       "outDir": "dist",       "resolveJsonModule": true,       "emitDecoratorMetadata": true,       "esModuleInterop": true,       "experimentalDecorators": true,       "sourceMap": true    },    "include": ["src/**/*.ts"],    "exclude": ["node_modules", "**/*.spec.ts"] } 
like image 531
peli Pongracz Avatar asked May 30 '20 00:05

peli Pongracz


People also ask

Does ts-node require TypeScript?

ts-node is a TypeScript execution engine and REPL for Node. js. It JIT transforms TypeScript into JavaScript, enabling you to directly execute TypeScript on Node. js without precompiling.

Does ts-node use TSC?

json (recommended)​ ts-node automatically finds and loads tsconfig. json . Most ts-node options can be specified in a "ts-node" object using their programmatic, camelCase names.


2 Answers

Remove "type": "module" from package.json


https://github.com/TypeStrong/ts-node/issues/935


If you don't want to remove "type": "module" (for example if you're using import statements in your .ts which allows the inference of types from modules), then you can use the following option in tsconfig.json:

{   "compilerOptions": {     "esModuleInterop": true,   } } 

And then you can start the server with the config using ts-node.

Install:

npm install -g ts-node 

Run:

ts-node my_server.ts 
like image 50
vadimk7 Avatar answered Oct 03 '22 02:10

vadimk7


use

node --loader ts-node/esm ./my-script.ts 

instead of

ts-node ./my-script.ts 
like image 24
buzuosheng Avatar answered Oct 03 '22 04:10

buzuosheng