'ts-node'不被识别为内部或外部命令,可操作程序或批处理文件

Mug*_*esh 34 node.js typescript2.0 ts-node

我在我的Vs Code终端和命令提示符中出现错误,即'ts-node'未被识别为内部或外部命令,可操作程序或批处理文件.当我在终端npm run dev中尝试启动命令时,我也添加了我的package.json文件.

{
"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"
}
Run Code Online (Sandbox Code Playgroud)

}

rsp*_*rsp 30

我不建议依赖全局安装ts-node在您自己的模块中,因为这里的一些答案建议.

如果你这样做,那么安装你的模块的任何人都需要ts-node全局安装(只是通常npm install是不够的)然后如果两个模块需要ts-node全局安装但具有不同版本等的东西你就会遇到问题.

为避免这种情况,应在pa​​ckage.json中定义所有依赖项,并在node_modules中本地安装.

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

例如,看看我安装(本地)时会发生什么,ts-node并且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]
Run Code Online (Sandbox Code Playgroud)

然后我尝试运行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
Run Code Online (Sandbox Code Playgroud)

我可以运行它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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

无论如何,我不需要在全球范围内安装任何东西.

  • 最重要的是,你的答案是: npm i ts-node typescript (14认同)
  • 这简直太棒了。 (3认同)

小智 28

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

npm install -g ts-node
Run Code Online (Sandbox Code Playgroud)

更多信息

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

  • 这不是一个好的答案,因为它依赖于其他开发人员在全球安装相同的模块.请参阅rsp的答案[下方](/sf/answers/3531796271/) (4认同)
  • 无需全局安装。 (3认同)

Dan*_*iel 19

我刚刚遇到了类似的问题:在Mac OS上--exec ts-node工作,在Windows上却没有.

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

{
  "watch": "src/**/*.ts",
  "execMap": {
    "ts": "ts-node"
  }
}
Run Code Online (Sandbox Code Playgroud)

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

"scripts": {
  "start": "nodemon src/index.ts"
},
Run Code Online (Sandbox Code Playgroud)

  • `nodemon.json`的文档可以从https://github.com/remy/nodemon#config-files找到,然后继续阅读下一节 (3认同)

Rou*_*com 14

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

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

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


Dan*_*ust 14

Nodemon 用于在文件更改时监视并重新运行节点进程。ts-node在参数范围内无法识别安装在node_modules目录中的本地文件--exec。为了解决这个问题,有些人建议ts-node全局安装。正如用户指出的那样,这不是一个好的解决方案,因为它依赖于项目外部的包,并使ts-node我们的项目变得node_modules毫无意义。

编辑:

使用较新版本的 nodemon,您可以进一步简化此操作(注意:您仍然需要将 ts-node 安装为 devDependency)。

"start": "nodemon src/index.ts"
Run Code Online (Sandbox Code Playgroud)

以前的:

要修复您的解决方案,请使用帮助程序ts-node作为前缀npx,它将使用您的本地node_module可执行文件。

package.json,在scripts块内:

"start": "nodemon --watch './src/**/*' -e ts --exec 'npx ts-node src/index.ts'"
Run Code Online (Sandbox Code Playgroud)

另一种方法可能是将打字稿观察器与现有node命令和concurrently包一起使用。

"start": "concurrently \"tsc --watch\" \"node ./dist/index.js\""
Run Code Online (Sandbox Code Playgroud)

同样的原则。一个包监视更改(nodemon 和 tsc)并重新启动第二个进程(node/ts-node 服务器)。

编辑 11/17/2021:我返回了这篇文章,将其用作设置原型构建的参考,发现nodemon上面的方法不再有效,它现在抛出错误:

''npx' is not recognized as an internal or external command,
operable program or batch file.
Run Code Online (Sandbox Code Playgroud)

我发现解决方法是将所有单引号转换为转义双引号。

"start": "nodemon --watch \"./src/**/*\" -e ts --exec \"npx ts-node src/index.ts\""
Run Code Online (Sandbox Code Playgroud)

猜猜自从我原来的帖子以来有些事情发生了变化。希望有帮助!


小智 10

唯一对我有用的解决方案:

"start": "nodemon --exec npx ts-node ./index.ts",
Run Code Online (Sandbox Code Playgroud)

  • 尝试所有的答案,终于可以了。 (2认同)
  • 这很好,但为什么每个人都跳过你的答案? (2认同)

Bri*_*ian 8

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

"dev": "nodemon --exec \"ts-node\" --cache-directory .tscache ./server.ts"
Run Code Online (Sandbox Code Playgroud)

PS这是问题发生后的1年。不知道软件包的版本是否是一个因素。将确认是否需要。

  • 这主要是在Windows上,否则可以使用单引号。 (3认同)

kar*_*luS 6

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


Uma*_*Saw 6

我有类似的问题,但我已经通过更换解决

"dev": "nodemon --exec 'ts-node --cache-directory .tscache' ./server.ts",
Run Code Online (Sandbox Code Playgroud)

"dev": "nodemon --exec ts-node --cache-directory .tscache ./server.ts",
Run Code Online (Sandbox Code Playgroud)

只需删除单引号(')并全局安装 ts-node


小智 5

我在使用时遇到了类似的问题nodemon

  • 我已nodemon全局安装,并且ts-node仅在本地安装。

解决方案:

  • ts-node全局安装(仍然保留本地依赖性)。


小智 5

我通过删除 ts-node 周围的单引号解决了这个问题。按照下面的“dev”:“nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/index.ts”

更新为“dev”:“nodemon --watch 'src/**/*.ts' --exec ts-node src/index.ts”

请注意。我的环境是windows 10和npm version6.14.4