isJoi = true; 语法错误:意外的令牌 =

hrp*_*xQ4 3 npm typescript joi nestjs

我正在多台机器上使用 NestJs 后端。一台机器无法处理@hapi/joi包。在开发模式下运行 NestJs 应用程序时,出现此错误

PS C:\Users\mhermsen\Desktop\joi-test> npm run start:dev

> joi-test@0.0.1 start:dev C:\Users\mhermsen\Desktop\joi-test
> nest start --watch

8:32:49 AM - Starting compilation in watch mode...


8:32:51 AM - Found 0 errors. Watching for file changes.
C:\Users\mhermsen\Desktop\joi-test\node_modules\@hapi\joi\lib\errors.js:246
    isJoi = true;
          ^

SyntaxError: Unexpected token =
    at Module._compile (internal/modules/cjs/loader.js:723:23)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    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)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at Object.<anonymous> (C:\Users\mhermsen\Desktop\joi-test\node_modules\@hapi\joi\lib\index.js:9:16)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
Run Code Online (Sandbox Code Playgroud)

我试图重现这个问题。首先,我通过nest new joi-test. 接下来我通过安装 joi

$ npm install --save @hapi/joi
$ npm install --save-dev @types/hapi__joi
Run Code Online (Sandbox Code Playgroud)

我删除了大部分代码。在SRC目录仅包含一个main.ts与文件

import * as Joi from "@hapi/joi";

Joi.object({
  num: Joi.number()
}).validate({
  port: "abc"
});
Run Code Online (Sandbox Code Playgroud)

不再有与 Nest 相关的代码,所以我认为这与 Nest 无关。删除验证并仅导入包时,代码工作正常。

import * as Joi from "@hapi/joi";

console.log("This is fine now");
Run Code Online (Sandbox Code Playgroud)

其他机器工作正常,这仅出现在本机上。任何想法如何解决它?


更新: 我在另一台公司的机器上测试过,这台机器也失败了。所以我的私人 Linux 机器似乎可以工作,而我公司的 Windows 10 机器似乎抛出了这个错误。

小智 5

我有同样的问题。我认为您将 joi v17 与 node < v12 一起使用

Joi 17 适用于 >= 12 的节点。因此您必须使用节点 12 或降级到 Joi-v.17