120

我的 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"
}

}

4

25 回答 25

153

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

npm install -g ts-node

更多信息

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

于 2017-06-26T16:14:16.633 回答
112

ts-node正如这里的一些答案所建议的那样,我不建议您依赖全局安装在您自己的模块中。

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

为避免这种情况,您的所有依赖项都应在您的 package.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]

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

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

于 2018-05-21T17:54:16.030 回答
41

我刚刚遇到了类似的问题:在 Mac OS--exec ts-node上有效,在 Windows 上无效。

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

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

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

"scripts": {
  "start": "nodemon src/index.ts"
},
于 2017-07-14T12:06:50.037 回答
33

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

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

PS这是问题发生后的1年。不确定包版本是否是一个因素。需要时会确认。

于 2018-11-23T17:10:06.627 回答
22

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

"start": "nodemon --exec npx ts-node ./index.ts",
于 2021-04-12T21:14:34.767 回答
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",

于 2019-09-24T09:27:05.057 回答
9

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

于 2019-02-24T13:42:25.270 回答
7

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

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

package.json,在scripts块内:

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

另一种方法是使用带有现有node命令和concurrently包的 typescript watcher。

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

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

2021 年 11 月 17 日编辑:我退回了这篇文章以将其用作设置原型构建的参考,并发现上述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\""

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

于 2021-02-04T02:33:18.733 回答
6

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

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

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

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

于 2020-05-05T14:06:43.590 回答
4

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

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

解决方案:

  • ts-node全局安装(仍然保持本地依赖)。
于 2019-05-28T00:05:32.210 回答
4

我通过删除 ts-node 周围的单个 quorts 解决了这个问题。按照下面的“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

于 2020-05-27T02:13:09.723 回答
3

就像某些答案中建议的那样,您应该ts-node在本地而不是全局安装。 npx使得使用注册表中托管的 CLI 工具和其他可执行文件变得很容易,如此处所述。因此,可用于ts-node在您的终端上运行,甚至可以从您的package.json文件中运行脚本。例如;

把它当作我的package.json档案

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

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

于 2021-06-01T17:34:18.873 回答
1

如果您的 ts-node 不工作,作为替代方案,您可以执行以下操作:

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

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

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

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

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

于 2019-07-23T21:35:16.153 回答
1

我在 Windows 上遇到了同样的问题。当我纠正一些放错位置时,我发现我的问题的解决方案已解决'

起初:

"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 实际上解释了问题解决方案

于 2020-02-21T02:00:31.997 回答
1

你可以试试下面的命令

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

这对我有用。

于 2021-09-16T07:03:48.453 回答
0

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

于 2022-03-02T18:15:40.837 回答
0

我帮助了这个命令

npm i -D 打字稿

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

于 2022-02-28T14:56:59.907 回答
0

在 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 run build

最后 npm run start

于 2022-01-11T00:44:56.100 回答
0

如果您在 vs-code 中使用 code-runner,请编辑 setting.json 文件

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

于 2021-05-21T17:40:06.867 回答
0

我遇到了同样的问题。我发现我的问题的解决方案已经解决,当我先运行这个命令"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"}
于 2020-03-17T13:39:45.640 回答
0

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

npm install -D tslib @types/node
于 2021-07-20T21:19:29.817 回答
0

纱线添加 -D ts-node

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

“纱线开始”现在有效

于 2022-02-12T22:05:54.800 回答
0

如果您使用的是 Mac,这些是我想出的步骤,以便在终端中解决此问题。

  1. 全局安装并使用返回的文件路径和符号链接'ts-node'并将此文件移动到 /usr/local/bin
  2. 本地安装而不保存到 package.json
  3. 将 /node_modules 中的文件夹复制到 /usr/local/lib/node_modules/
  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_modules/ts-node/node_modules
于 2018-12-14T22:28:25.630 回答
0

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

于 2022-02-04T17:11:19.650 回答
-1

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

于 2019-04-16T14:38:37.160 回答