使用 ts-node-dev 运行一个简单的 Express 应用程序并收到错误:错误表达式:非字符串值传递给 `ts.resolveTypeReferenceDirective`

问题描述 投票:0回答:8

我是打字稿和表达的新手。我尝试使用

ts-node-dev
运行最简单的 Express 应用程序,但出现以下错误。

> ./node_modules/.bin/ts-node-dev src/index.ts                                                 16:07:40
[INFO] 16:07:42 ts-node-dev ver. 1.1.8 (using ts-node ver. 9.1.1, typescript ver. 4.7.2)
Compilation error in /home/lht/microservice/ticketing/auth/src/index.ts
Error: Debug Failure. False expression: Non-string value passed to `ts.resolveTypeReferenceDirective`, likely by a wrapping package working with an outdated `resolveTypeReferenceDirectives` signature. This is probably not a problem in TS itself.
    at Object.<anonymous> (/home/lht/microservice/ticketing/auth/src/index.ts:1:7)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Module._compile (/home/lht/microservice/ticketing/auth/node_modules/source-map-support/source-map-support.js:568:25)
    at Module.m._compile (/tmp/ts-node-dev-hook-8101223397369532.js:69:33)
    at Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at require.extensions.(anonymous function) (/tmp/ts-node-dev-hook-8101223397369532.js:71:20)
    at Object.nodeDevHook [as .ts] (/home/lht/microservice/ticketing/auth/node_modules/ts-node-dev/lib/hook.js:63:13)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
[ERROR] 16:07:42 Error: Debug Failure. False expression: Non-string value passed to `ts.resolveTypeReferenceDirective`, likely by a wrapping package working with an outdated `resolveTypeReferenceDirectives` signature. This is probably not a problem in TS itself.

以下是我的

index.ts
文件。

import express from "express";
import { json } from "body-parser";

const app = express();
app.use(json());

app.listen(3000, () => {
  console.log("Listening on port 3000!");
});

这是我的

package.json
文件

{
  "name": "auth",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "ts-node src/index.ts"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {},
  "dependencies": {
    "@types/express": "^4.17.13",
    "@types/node": "^17.0.35",
    "express": "^4.18.1",
    "ts-node": "^10.8.0",
    "ts-node-dev": "^1.1.8",
    "typescript": "^4.7.2"
  }
}

我想知道我所做的一些配置是否错误。预先感谢。

javascript typescript express package.json ts-node
8个回答
18
投票

只需在我的

ts-node-dev
文件中将
1.1.8
版本从
2.0.0-0
更改为
package.json
,然后再次运行
npm install
,错误就会消失。

{
  "name": "auth",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "ts-node src/index.ts"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {},
  "dependencies": {
    "@types/express": "^4.17.13",
    "@types/node": "^17.0.35",
    "express": "^4.18.1",
    "ts-node": "^10.8.0",
    "ts-node-dev": "^2.0.0-0",
    "typescript": "^4.7.2"
  }
}

7
投票

我在一个新构建的 typeorm 应用程序中遇到了这个问题(

npx create-express-typescript-application my-app -t typeorm
)。将
ts-node
碰撞到
^10.8.0
解决了问题。


6
投票

我观察到,为什么其他服务运行良好,除了一个。 我发现失败的服务是使用不同的 TS 版本进行编译的。 换了TS版本后

"typescript": "^4.6.3"

"typescript": "4.6.4"

这也解决了问题。


4
投票

一个快速简单的解决方法是运行

npm install typescript@latest ts-node@latest
。问题可能是旧的 ts-node 与最新的 typescript 4.7.x 版本不兼容,升级它们可以解决我的问题。


4
投票

当我尝试使用nodemon 在yarn 工作区中运行节点服务器时,我刚刚遇到了这个问题。从工作区子文件夹运行 nodemon 可以,但不能从工作区根文件夹本身运行。

worspace 子文件夹中的脚本如下所示

"dev": "nodemon"

并从根文件夹

"dev:my-service": "yarn workspace my-service dev"

我通过专门将 ts-node 作为开发依赖项添加到“my-service”工作区来解决它


2
投票

只需更改

ts-node

的版本

    "ts-node": "10.8.1",

运行

npm i
yarn


1
投票

运行:

npm uninstall ts-node && npm uninstall ts-node-dev

然后运行:

npm i ts-node && npm i ts-node-dev --save-dev

0
投票

而不是使用“ts-node-dev --respawn --transpile-only server.ts” 我使用了“ts-node-dev --respawn server.ts”并且它工作了

© www.soinside.com 2019 - 2024. All rights reserved.