关于node.js:“ ts-node”未被识别为内部或外部命令,可操作程序或批处理文件

'ts-node' is not recognized as an internal or external command, operable program or batch file

我在Vs Code终端和命令提示符中遇到错误,提示" ts-node"未被识别为内部或外部命令,可操作程序或批处理文件。 当我在终端npm中尝试启动命令时,运行dev并且我也添加了package.json文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"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"
}

}


我不建议您在自己的模块中依赖全局安装的ts-node,因为此处的一些答案表明了这一点。

如果这样做,那么安装模块的任何人都将需要同时全局安装ts-node(仅普通的npm install是不够的),然后如果两个模块需要全局安装ts-node之类的东西,就会出现问题。但具有不同的版本等

为了避免这种情况,应该在package.json中定义所有依赖项,并将其本地安装在node_modules中。

有一个鲜为人知的命令npx,该命令用于从node_modules中本地安装的模块运行二进制文件。

例如,查看在本地安装ts-nodetypescript时会发生什么:

1
2
3
4
5
6
7
8
rsp@mn-r:~/node/test/ts-test-1$ npm i ts-node typescript
npm WARN [email protected] No description
npm WARN [email protected] No repository field.

+ [email protected]
+ [email protected]
added 19 packages from 44 contributors in 2.157s
[+] no known vulnerabilities found [19 packages audited]

然后尝试运行ts-node

1
2
rsp@mn-r:~/node/test/ts-test-1$ ts-node -v
-bash: /Users/rsp/opt/node/bin/ts-node: No such file or directory

我可以用npx运行它:

1
2
3
4
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

或者我可以明确给出路径:

1
2
3
4
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

无论如何,我不需要全局安装任何东西。


您需要将ts-node安装为全局

1
npm install -g ts-node

更多信息

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


我刚遇到类似的问题:在Mac OS --exec ts-node上可以工作,在Windows上则不能。

我的解决方法是创建一个nodemon.json像这样:

1
2
3
4
5
6
{
 "watch":"src/**/*.ts",
 "execMap": {
   "ts":"ts-node"
  }
}

并将package.json脚本部分更改为

1
2
3
"scripts": {
 "start":"nodemon src/index.ts"
},


我遇到了同样的问题,发现它通过使用双引号而不是单引号来工作。

1
"dev":"nodemon --exec "ts-node" --cache-directory .tscache ./server.ts"

附言问题出炉后的一年。不知道软件包的版本是否是一个因素。将确认是否需要。


对我来说,删除node_modules并使用npm i重新安装就足够了。


使用nodemon时遇到类似的问题:

  • 我在全局安装了nodemon,而在本地仅安装了ts-node

解:

  • 我在全球范围内安装了ts-node(仍然保持本地依赖性)。


如果您的ts节点不起作用,则可以执行以下操作:

1)在本地安装nodemon-> npm i nodemon

2)在您的package.json'脚本'中添加以下内容:

1
2
3
4
"scripts": {
   "start":"nodemon index.ts",
   "test":"echo "Error: no test specified" && exit 1"
  },

3)现在运行npm start(这将为您自动运行节点,但这将是WILLNOTCOMPILETS)

4)在终端/命令行中打开一个新选项卡,cd您正在使用的文件夹,然后运行tsc index.tsc --watch
这将编译您的打字稿。唯一的缺点是您只需要打开两个选项卡即可,一个选项卡用于自动运行节点,另一个选项卡用于自动编译,但这是可行的。


如果您在Windows下工作,则无法在json文件中使用单引号。这就是为什么必须将所有单引号(')替换为双引号(")。
但是在两个双引号(")之间,您必须使用转义的双引号(")。
对于当前情况,您必须更改文件" package.json"中的行:

" dev":" nodemon --exec'ts-node --cache-directory .tscache'./server.ts",

进入行:
" dev":" nodemon --exec" ts-node --cache-directory .tscache" ./server.ts",


我从开发依赖项中删除了它,并将其添加到依赖项中。这为我的案件解决了问题。


如果您使用的是Mac,请按照以下步骤进行操作,以在终端中进行修复。

  • 安装globaly并将返回的文件路径与符号链接" ts-node"一起使用,然后将此文件移至/ usr / local / bin
  • 在本地安装而不保存到package.json
  • 将/ node_modules中的文件夹复制到/ usr / local / lib / node_modules /
  • 通过打开/ ts-node / dist并使用命令chmod +x bin.js,确保文件可执行。
  • 在ts-node文件夹中运行npm i
  • 确保dist文件夹仍然存在,如果没有将其复制回来。
  • 测试终端中运行的ts-node,如果它不起作用,将返回错误,指出哪个模块需要移至../
  • ts-node运行后,请确保删除文件夹/ usr / local / lib / node_modules / ts-node / node_modules