NodeJS Vercel NestJS部署因类型问题而失败

2exbekwf  于 2023-05-06  发布在  Node.js
关注(0)|答案(2)|浏览(355)

bounty还有3天到期。此问题的答案有资格获得+200声望奖励。Mr_Green希望引起更多关注这个问题。

背景:

我正在做一个休闲项目,连接不同的谷歌服务,以减轻我的日常个人事务。在main分支上提供的NodeJS代码工作正常,即Vercel部署成功,但现在我将其迁移到NestJS,以便我可以扩展应用程序。
回购:Github repo

问题

Vercel上的NestJS部署抛出了类型问题,可以在Vercel日志和部署状态-〉building中看到。它在本地工作正常,但在Vercel部署上无法正常工作。
我的假设是问题在tsconfig文件中。下面是其中的代码:

{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": false,
    "target": "ES6",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    "skipLibCheck": true,
    "strictNullChecks": false,
    "noImplicitAny": false,
    "strictBindCallApply": false,
    "forceConsistentCasingInFileNames": false,
    "noFallthroughCasesInSwitch": false,
  }
}

更多详情,请查看此github issue link

更新:

我能够在很大程度上解决类型问题。奇怪的是,类型问题只在Vercel部署日志中可见。我认为现在只有一个问题,那就是。Vercel无法拾取部署中的*.njk文件。
以下是正在进行的工作Github PR

更新二:

未找到Vercel for nunjucks模板的问题
issue

6l7fqoea

6l7fqoea1#

这里有两个问题:

  • /的处理程序函数中出现异常
  • 类型检查错误

看来你应该修复fileUpload是不是一个功能问题,以防止500;
第二点是关于构建错误的Vercel部署的一般方法;因为构建错误(包括类型检查错误)是每个项目特有的:

解决方案

在本地运行build命令,逐一修复所有发生的问题;如果build命令在您机器上运行时没有错误,那么它在vercel上也不会有问题;

hfwmuf9z

hfwmuf9z2#

有类型问题,奇怪的是只在Vercel部署日志中可见。我无法在本地复制它们。无论如何,我会在这里列出主要的修复方法。所有修复都可以在此PR中使用。

tsconfig修复

  • CompilerOptions中的"esModuleInterop": true

奇怪的是,所有关于SO的解决方案都建议将其保持为“假”。

在server & Vercel部署中允许*.njk nunjucks模板

Vercel.json

{
  "version": 2,
  "builds": [
    {
      "src": "src/main.ts",
      "use": "@vercel/node"
    },
    {
      "src": "**/*.njk",
      "use": "@vercel/static"
    }
  ],
  ...
  ...
}

nest-cli.json

{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true,
    "assets": ["**/*.njk"]
  }
}

express-serve-static-core中取RequestResponse类型,而不是从express🤷‍♂中取️

import type { Request, Response } from 'express-serve-static-core';

而不是

import type { Request, Response } from 'express';

相关问题