“ ts-node”不能识别为内部或外部命令、可操作程序或批处理文件

当我在终端 Npm 运行 dev中尝试 start 命令时,在 V Code 终端和命令提示符 “ ts-node”不能识别为内部或外部命令、可操作程序或批处理文件。中出现错误,我还添加了 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"
}

}

237793 次浏览

您需要将 ts-node 安装为 global

npm install -g ts-node

更多信息

Https://github.com/typestrong/ts-node

我刚刚遇到了一个类似的问题: 在 MacOS--exec ts-node上可以工作,在 Windows 上却不能。

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

{
"watch": "src/**/*.ts",
"execMap": {
"ts": "ts-node"
}
}

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

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

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

如果你这样做,那么任何人谁安装你的模块将需要安装 ts-node全局以及(只是一个普通的 npm install将是不够的) ,然后你会有一个问题,如果两个模块需要像 ts-node全局安装,但不同的版本等。

为了避免这种情况,所有的依赖项都应该在 package.json 中定义,并在 node _ module 中本地安装。

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

例如,看看当我安装(本地) ts-nodetypescript时会发生什么:

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]

然后我尝试运行 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

我可以用 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

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

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

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

我遇到了同样的问题,发现使用双引号而不是单引号可以解决这个问题。

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

这是问题发生后的一年。不确定软件包版本是否是一个因素。如果需要将确认。

如果你正在使用一个 mac,这些是我想出来的步骤,以解决这个在终端。

  1. 安装 globaly 并使用符号链接‘ ts-node’返回的文件路径,然后将该文件移动到/usr/local/bin
  2. 在本地安装,不要保存到 package.json
  3. 将/node _ module 中的文件夹复制到/usr/local/lib/node _ module/
  4. 通过打开/ts-node/dist 并使用命令 chmod +x bin.js确保文件是可执行的
  5. 在 ts-node 文件夹中运行 npm i
  6. 确保 dist 文件夹仍然存在,如果没有将其复制回来的话。
  7. 在终端中测试运行 ts-node,如果它不工作,它将返回需要移动到哪个模块的错误。./
  8. 在 ts-node 运行之后,一定要删除文件夹/usr/local/lib/node _ module/ts-node/node _ module

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

我从开发人员依赖中删除了它,并将它添加到依赖中,这就解决了我的问题。

我在使用 nodemon时也遇到过类似的问题:

  • 我在全球范围内安装了 nodemon,而 ts-node只在本地安装。

解决方案:

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

如果您的 t- 节点无法工作,您可以执行以下操作:

1)在本地安装 noemon —— > npm i nodemon

2)在 package.json“ script”中添加以下内容:

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

3)现在运行 npm start(这将自动为您运行节点,但不会编译 TS)

4)在终端/命令行中打开一个新的选项卡,cd 你工作的文件夹并运行 tsc index.tsc --watch
这将编译您的打印脚本。唯一的缺点是您必须同时打开两个选项卡,一个用于自动运行节点,另一个用于自动编译,但是这样可以工作。

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

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

排成一排:

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

窗户上也有同样的问题。我发现解决我的问题是解决了当我纠正了一些错误的 '

原文:

"scripts": {
"dev": "nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/index.ts",
"build": "tsc",
"start": "node dist/index.js"
}

修正:

"scripts": {
"dev": "nodemon --watch 'src/**/*.ts' --exec \"ts-node\" src/index.ts",
"build": "tsc",
"start": "node dist/index.js"
}

不同的情况下,这是不清楚的是,我不再包装 ts-node'

我根据上面@RoutesMaps.com 的回答改变了这一点。这解决了我的问题,同时也移除了 ',但是@RoutesMaps.com 实际上解释了问题的解决方案

我也有同样的问题。我发现我的问题的解决方案已经解决了,当我只是运行这个命令第一个 "npm run build",然后尝试它 nodemon,并在 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"}

我也有过类似的问题,但是我已经解决了

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

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

只需删除单引号(’)并在全局范围内安装 ts- 节点即可

我通过删除 ts-node. 附近的单个 quorts 修复了这个问题,如下所示 “ dev”: “ noemon —— watch‘ src/* */* . ts’—— exec‘ ts-node’src/index.ts”

更新为 “ dev”: “ noemon —— watch‘ src/* */* . ts’—— exec ts-node src/index.ts”

请注意,我的环境是 windows 10和 npm version 6.14.4

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

要修复您的解决方案,请在 ts-node前面加上 npx助手,它将使用您的本地 node_module可执行文件。

Package.json,在 scripts块中:

"start": "nodemon --watch './src/**/*' -e ts --exec 'npx ts-node src/index.ts'"

另一种方法是使用带有现有 node命令和 concurrently包的打印脚本监视器。

"start": "concurrently \"tsc --watch\" \"node ./dist/index.js\""

同样的原理。一个包监视更改(noemon & tsc)并重新启动第二个进程(node/ts-node server)。

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

''npx' is not recognized as an internal or external command,
operable program or batch file.

我发现一个修正方法是将所有单引号转换为转义双引号。

"start": "nodemon --watch \"./src/**/*\" -e ts --exec \"npx ts-node src/index.ts\""

我猜自从我原来的职位以来,有些事情改变了。希望能有所帮助!

对我来说唯一有效的解决办法是:

"start": "nodemon --exec npx ts-node ./index.ts",

如果您在 vs-code 中使用 code-runner,那么编辑 seting.json 文件

"typescript": "tsc $fileName && node $fileNameWithoutExt.js "

正如在一些答案中建议的那样,您应该在本地而不是全局安装 ts-nodenpx使得使用 CLI 工具和其他驻留在注册表 就像这里解释的那样上的可执行文件变得很容易。因此,可以用来在终端上运行 ts-node,甚至可以用来运行 package.json文件中的脚本。例如:

把这个作为我的 package.json文件

{
...
"scripts": {
"start": "npx nodemon path/to/file"
}
}

现在运行 npm run start不会再出现任何问题。

在 npm install ts-node 之后,我运行了这个命令。 这解决了我的问题:

npm install -D tslib @types/node

可以尝试以下命令

"dev": "nodemon --watch './**/*.ts' --exec \"ts-node\" src/index.ts"

这招对我很管用。

在 package.json 文件中像这样编写脚本

“脚本”: {

"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"

},

然后,npm 运行 build

最后 npm 运行开始

我在尝试从 Git Bash运行 不是恶魔时遇到了同样的错误,但是当从 PowerShell运行非恶魔程序时,它似乎工作得很好。所以,你应该考虑给其他终端一个机会。

纱线加法节点

"scripts": {
"start": "ts-node src/index.ts"
}

“纱线开始”现在起作用了

我协助指挥

Npm i-D 打字脚本

更具体地写在那里 https://nodejs.dev/learn/nodejs-with-typescript

请使用 TSC --init,而不是 TS --init

找到答案了。 不需要在全局范围内安装 ts-node,只需在项目 nodemon.json 文件中创建并放在那里:

{
"execMap": {
"ts": "node --loader ts-node/esm"
}
}

现在,您可以在 package.json 中保留类型: “ module”,在 tsconfig.json 中保留类型: “ ESNEXT (或者支持 ES 模块的 smth)”。然而,你会不断得到警告,从无恶魔,我的意思是加载程序类型,实验性功能,但它不是关键。

例如,在 package.json 中,在 dev 命令中只运行 noemon path/filename.ts

如果在项目中安装了一个版本的 ts- 节点,并在全局范围内安装了另一个版本,则可能发生此错误。 要解决这个问题-安装相同版本的软件包

只是遇到了同样的问题,并提出了一个混合解决方案,使用 npx 执行,但是通过 noemon config (而不是 package.json)。

Nodemon Json...

{
"watch": ["src"],
"ext": "ts",
"exec": "npx ts-node ./src/server.ts"
}

实际上,如果您在全局范围内安装 noemon,那么也在全局范围内安装 ts- 节点。如果您将 noemon 安装为-D (dev 依赖项) ,那么将 ts-node 安装为 dev 依赖项。会成功的。