isJoi = true; SyntaxError: Unexpected token =

isJoi = true; SyntaxError: Unexpected token =

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

PS C:\Users\mhermsen\Desktop\joi-test> npm 运行 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)

我试图重现这个问题。首先,我通过 nest new joi-test 创建了一个新的 Nest 应用程序。接下来我通过

安装了 joi
$ npm install --save @hapi/joi
$ npm install --save-dev @types/hapi__joi

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

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

Joi.object({
  num: Joi.number()
}).validate({
  port: "abc"
});

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

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

console.log("This is fine now");

其他机器正常,只出现在本机。有什么解决办法吗?


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

我遇到了同样的问题。 我认为您将 joi v17 与 node < v12

一起使用

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

如果您使用的是 nvm,请在您的终端中像这样升级您的节点版本

$ nvm install 12
$ nvm use 12

并重新启动您的节点应用程序。

这是一个关于如何安装 nvm 的很好的教程 https://dev.to/jlouiss/how-to-use-nvm-and-why-4e05