'ts-node' is not recognized as an internal or external command, operable program or batch file
node.jstypescript2.0Ts Nodenode.js Problem Overview
I'm getting error in my Vs Code terminal and command prompt that 'ts-node' is not recognized as an internal or external command, operable program or batch file. while i'm trying the start command in the terminal npm run dev and i have added my package.json file also.
{
"name": "tsnode",
"version": "1.0.0",
"description": "ts-node experiment.",
"scripts": {
"dev": "nodemon --exec 'ts-node --cache-directory .tscache' ./server.ts",
"start": "ts-node --fast ./server.ts"
},
"author": "Mugesh",
"license": "ISC",
"dependencies": {
"@types/body-parser": "^1.16.3",
"@types/chalk": "^0.4.31",
"@types/express": "^4.0.35",
"@types/node": "^7.0.18",
"body-parser": "^1.17.1",
"chalk": "^1.1.3",
"express": "^4.15.2",
"nodemon": "^1.11.0",
"ts-node": "^3.0.4",
"typescript": "^2.3.4"
}
}
node.js Solutions
Solution 1 - node.js
You need to install ts-node as global
npm install -g ts-node
More information
Solution 2 - node.js
I wouldn't recommend relying on globally installed ts-node
in your own module as some of the answers here suggest.
If you do that then anyone who installs your module would need to install ts-node
globally as well (just a usual npm install
would not be enough) and then you will have a problem if two modules need things like ts-node
globally installed but with different versions etc.
To avoid that, all your dependencies should be defined in your package.json and installed locally in node_modules.
There is a little-known command npx
that is used to run binaries from modules that are installed locally in node_modules.
For example, see what happens when I install (locally) ts-node
and typescript
:
rsp@mn-r:~/node/test/ts-test-1$ npm i ts-node typescript
npm WARN ts-test-1@0.0.0 No description
npm WARN ts-test-1@0.0.0 No repository field.
+ ts-node@6.0.3
+ typescript@2.8.3
added 19 packages from 44 contributors in 2.157s
[+] no known vulnerabilities found [19 packages audited]
and then I try to run ts-node
:
rsp@mn-r:~/node/test/ts-test-1$ ts-node -v
-bash: /Users/rsp/opt/node/bin/ts-node: No such file or directory
I can run it with npx
:
127!rsp@mn-r:~/node/test/ts-test-1$ npx ts-node -v
ts-node v6.0.3
node v10.1.0
typescript v2.8.3
or I could give the path explicitly:
rsp@mn-r:~/node/test/ts-test-1$ ./node_modules/.bin/ts-node -v
ts-node v6.0.3
node v10.1.0
typescript v2.8.3
In any case, I don't need to install anything globally.
Solution 3 - node.js
I just encountered a similar issue: on Mac OS --exec ts-node
works, on Windows it doesn't.
My workaround is to create a nodemon.json
like this:
{
"watch": "src/**/*.ts",
"execMap": {
"ts": "ts-node"
}
}
and change the package.json
scripts section to
"scripts": {
"start": "nodemon src/index.ts"
},
Solution 4 - node.js
I ran into the same problem and found that it works by using double quotes instead of single.
"dev": "nodemon --exec \"ts-node\" --cache-directory .tscache ./server.ts"
P.S. This is 1 year after the problem. Not sure if package versions are a factor. Will confirm if needed.
Solution 5 - node.js
The only solution that worked for me:
"start": "nodemon --exec npx ts-node ./index.ts",
Solution 6 - node.js
If you work under Windows you can't use single quote in the json file. That is why you have to replace all single quote symbols(') by the double quote symbols(").
But between two double quotes(") you have to use escaped double quote(").
For the current case you have to change the row in the file package.json
:
"dev": "nodemon --exec 'ts-node --cache-directory .tscache' ./server.ts",
into the row:
"dev": "nodemon --exec \"ts-node --cache-directory .tscache\" ./server.ts",
Solution 7 - node.js
Nodemon is for watching and rerunning node processes when files change. The local ts-node
installed in the node_modules directory is not recognized in the scope of the --exec
argument. To get around this, some people have recommended installing ts-node
globally. As a user pointed out, that's not a good solution because it relies on packages external to your project and makes the ts-node
in our node_modules
pointless.
To fix your solution, prefix ts-node
with the npx
helper, which will use your local node_module
executables.
package.json, inside the scripts
block:
"start": "nodemon --watch './src/**/*' -e ts --exec 'npx ts-node src/index.ts'"
An alternative approach could be to use the typescript watcher with the existing node
command and the concurrently
package.
"start": "concurrently \"tsc --watch\" \"node ./dist/index.js\""
Same principle. One package watches for changes (nodemon & tsc) and restarts the second process (the node/ts-node server).
Edit 11/17/2021:
I returned this post to use it as a reference for setting up a prototype build and found the nodemon
approach above was no longer working, it was now throwing the error:
''npx' is not recognized as an internal or external command,
operable program or batch file.
I found a fix was to convert all single quotes to escaped double quotes.
"start": "nodemon --watch \"./src/**/*\" -e ts --exec \"npx ts-node src/index.ts\""
Guess something changed since I my original post. Hope that helps!
Solution 8 - node.js
For me deleting node_modules
and installing it again using npm i
was enough.
Solution 9 - node.js
I had the similar problem, but I have resolved by replacing
"dev": "nodemon --exec 'ts-node --cache-directory .tscache' ./server.ts",
to
"dev": "nodemon --exec ts-node --cache-directory .tscache ./server.ts",
Just remove the single quote(') and install ts-node globally
Solution 10 - node.js
I had a similar problem while using nodemon
:
- I had
nodemon
installed globally, ANDts-node
only installed locally.
Solution:
- I installed
ts-node
globally (still keeping the local dependency).
Solution 11 - node.js
I fixed the issue by removing single quorts around ts-node. as per below "dev": "nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/index.ts"
updated as "dev": "nodemon --watch 'src/**/*.ts' --exec ts-node src/index.ts"
please note. my environment is windows 10 and npm version6.14.4
Solution 12 - node.js
Like suggested in some answers, you should install ts-node
locally and not globally. npx
makes it easy to use CLI tools and other executables hosted on the registry as explained here. Hence, can be used to run ts-node
on your terminal and even scripts from your package.json
file. For example;
Take this to be my package.json
file
{
...
"scripts": {
"start": "npx nodemon path/to/file"
}
}
Now running npm run start
would not give any more issues.
Solution 13 - node.js
If your ts-node isn't working, as an alternative you can do the following:
-
Install nodemon locally -->
npm i nodemon
-
In your package.json 'scripts' add the following:
"scripts": { "start": "nodemon index.ts", "test": "echo "Error: no test specified" && exit 1" },
-
Now run
npm start
(this will automatically run node for you, but this WILL NOT COMPILE TS ) -
Open a new tab in the terminal/command line, cd the folder your working in and run
tsc index.tsc --watch
This will compile your typescript. The only downside is you will just have to have both tabs open, one for running node automatically and the other for compiling automatically, but this works.
Solution 14 - node.js
I was having the same issue on windows. I found the solution for my issue was resolved when I corrected some misplaced '
Originally:
"scripts": {
"dev": "nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/index.ts",
"build": "tsc",
"start": "node dist/index.js"
}
Fixed:
"scripts": {
"dev": "nodemon --watch 'src/**/*.ts' --exec \"ts-node\" src/index.ts",
"build": "tsc",
"start": "node dist/index.js"
}
The difference in case it isn't clear is that I no longer wrap ts-node
in '
*** EDIT ***
I changed this based on the answer from @RoutesMaps.com above. This solved my problem as well as removing the '
but @RoutesMaps.com actually explains the issue resolution
Solution 15 - node.js
You can try the following command
"dev": "nodemon --watch './**/*.ts' --exec \"ts-node\" src/index.ts"
This worked for me .
Solution 16 - node.js
yarn add -D ts-node
"scripts": {
"start": "ts-node src/index.ts"
}
'yarn start' now works
Solution 17 - node.js
Found the answer. Without installing ts-node globally, just create inside your project nodemon.json file and put it there :
{
"execMap": {
"ts": "node --loader ts-node/esm"
}
}
So now, you can keep type:"module" in your package.json and module:"ESNEXT(or smth that supports ES Modules)" in your tsconfig.json. However, you are going to get constant warning from nodemon that it's, I mean loader type, experimental feature but it's not critical.
In your package.json, in dev command for example just run nodemon path/filename.ts
Solution 18 - node.js
If you are using a mac these are the steps I came up with in order to fix this in the terminal.
- Install globaly and use the returned file path with the symlink ‘ts-node’ and move this file into /usr/local/bin
- Install locally without saving to package.json
- copy folder in /node_modules into /usr/local/lib/node_modules/
- Make sure the file is executable by opening /ts-node/dist and using the command
chmod +x bin.js
- run npm i in ts-node folder
- Make sure that dist folder still exsists, if not copy it back over.
- Test running ts-node in terminal, if it does not work it will return an error of which module needs to be moved over to ../
- After ts-node runs be sure to delete the folder /usr/local/lib/node_modules/ts-node/node_modules
Solution 19 - node.js
I was having the same issue. I found the solution for my issue was resolved when i do simply run this command first "npm run build"
and than try it nodemon
and also add in package.json
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "tsc",
"dev": "ts-node ./lib/server.ts",
"start": "nodemon ./dist/server.js",
"prod": "npm run build && npm run start"}
Solution 20 - node.js
If you are using code-runner in vs-code then edit setting.json file
"typescript": "tsc $fileName && node $fileNameWithoutExt.js "
Solution 21 - node.js
I ran this command after npm install ts-node. This fixed my problem:
npm install -D tslib @types/node
Solution 22 - node.js
Write the the script like this inside your package.json file
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "rimraf ./build && tsc",
"start": "node build/index.js",
"tsc": "tsc",
"watch-node": "nodemon build/index.js",
"postinstall": "npm run tsc"
},
Then, npm run build
and finally npm run start
Solution 23 - node.js
I encountered the same error when trying to run nodemon from a Git Bash but it seems to be working just fine when running nodemon from PowerShell. So, you should consider giving some other terminals a chance.
Solution 24 - node.js
Me helped this command
> npm i -D typescript
More specifically written there https://nodejs.dev/learn/nodejs-with-typescript
Solution 25 - node.js
Please use TSC --init
, instead of TS --init
Solution 26 - node.js
this error can occur if you have one version of ts-node installed in your project and another version globally. To solve the problem - install the same version of the package
Solution 27 - node.js
I removed it from dev dependencies and added it to dependencies. That solved the problem for my case.