nest使用cloudbase(tcb)进行serverless开发

nest使用cloudbase(tcb)进行serverless开发

Tencent Cloud Base:腾讯云平台下面简称tcb

  • 前置:
    • 注册腾讯云
    • 实名
    • 开通云开发(Fass(也就是Serverless) + Bass)

这里不讲解什么是serverless,什么是Fass,什么是Bass,这种东西你去b站看个20分钟的视频比我罗里吧嗦效率高得多。

Tips:腾讯云每月都会分配一定容量免费,超过就是按量付费,这个可以自己看看
传送门:tcb免费额度和付费情况

踩坑点(如果你是看教程就先看后面)

  1. 一号坑:再windows环境下,package.json文件的script使用环境变量报错
"scripts": {
    // ...
    "dev": "NODE_ENV=development nest start --watch",
    // ...
}
  • 解决办法:

    • 全局安装cross-env包再将package.json文件添加cross-env前缀
    "scripts": {
        // ...
        "dev": "cross-env NODE_ENV=development nest start --watch",
        // ...
    }
    
  1. 二号坑:Module ‘“buffer”’ has no exported member ‘Blob’

重点:“升级@types/node(从 12.x 到 14.x)对我有用”

  • 其他都对我没用,在我成功将@types/node锁定到14.x版本后pnpm i解决
"devDependencies": {
    "@types/node": "^14.0.0",
}

创建环境

当你腾讯云账号有了,也开通了cloudbase

  1. 新建

  1. 创建

差不多都是右手就行的东西🐸

  1. 创建需要一定的时间,等一会之后就如下

  1. 进入界面

使用TCB Cli

基础

  1. 全局安装
npm i -g @cloudbase/cli
pnpm add -g @cloudbase/cli
yarn global add @cloudbase/cli
  1. 检测
tcb -v
  1. 比较重要的命令

更多配置、命令、教程参考Cloud Base官网:cloudbase cli 官网

# 登录
tcb login

# 部署
tcb fn deploy [option]
  -e, --envId <envId>         环境 Id
  --code-secret <codeSecret>  传入此参数将保护代码,格式为 36 位大小写字母和数字
  --force                     如果存在同名函数,上传后覆盖同名函数
  --path <path>               自动创建HTTP 访问服务访问路径
  --all                       部署配置文件中的包含的全部云函数
  --dir <dir>                 指定云函数的文件夹路径
# 可以直接tcb fn deploy会问你是部署配置文件中的包含的全部云函数

# 查看部署的函数列表
tcb fn list

# 下载云函数
tcb fn code download <functionName> [destPath]
# 下载demo云函数路径根据cloudbaserc.json中的functionRoot参数
tcb fn code download demo 

# 触发 app 函数
tcb fn invoke app

# 只更新代码部分
tcb fn code update app

配置文件cloudbaserc.json,tcb初始化时会创建改函数

初始化项目

# 根据提示登录
tcb login

# 因为我用官方的模板构建失败, 所以需要我们自己构建
tcb new nest-short-url
  • 生成模板

踩坑点一号、二号

npm i后你会发现跑不起来
这里最好用npm,再云函数中安装依赖就是npm,保持一致比较好

  1. 情况一
'NODE_ENV' is not recognized as an internal or external command,
operable program or batch file.
  1. 情况二
node_modules/@types/superagent/index.d.ts:23:10 - error TS2305: Module '"buffer"' has no exported member 'Blob'.

23 import { Blob } from "buffer";
            ~~~~
[20:47:29] Found 1 error. Watching for file changes.

以上两种情况,解决方式都参考前面的踩坑点标题的内容

  1. 解决完之后就能跑起来了
[Nest] 41044   - 2022/02/15 20:49:14   [NestFactory] Starting Nest application...
[Nest] 41044   - 2022/02/15 20:49:14   [InstanceLoader] AppModule dependencies initialized +68ms
[Nest] 41044   - 2022/02/15 20:49:14   [RoutesResolver] AppController {}: +13ms
[Nest] 41044   - 2022/02/15 20:49:14   [RouterExplorer] Mapped {, GET} route +12ms
[Nest] 41044   - 2022/02/15 20:49:14   [RouterExplorer] Mapped {/home, GET} route +2ms
[Nest] 41044   - 2022/02/15 20:49:14   [NestApplication] Nest application successfully started +8ms
App listen on http://localhost:5000

部署+依赖安装

场景:代码写完了,提交所有文件、配置文件、让云函数依赖更新

  • 也就是package.json文件内模板作者帮我们已经完成的,直接用即可
npm run deploy

Tips:npm run deploy用到了插件,如果你不想使用默认的云函数名就去修改(相关详情查看@cloudbase/framework-plugin-node文档)

{
  "version": "2.0",
  "envId": "nest-short-url-7gcrn1kw9452ff9a",
  "$schema": "https://framework-1258016615.tcloudbaseapp.com/schema/latest.json",
  // 插件内容
  "framework": {
    "name": "nest-starter",
    "plugins": {
      "node": {
        "use": "@cloudbase/framework-plugin-node",
        "inputs": {
          "name": "nest-starter",
          "path": "/nest-starter",
          "entry": "app.js",
          "buildCommand": "npm install --prefer-offline --no-audit --progress=false && npm run build",
          "functionOptions": {
            "timeout": 5,
            "envVariables": {
              "NODE_ENV": "production"
            }
          }
        }
      }
    }
  },
  // 下载时函数都会放进 functions文件加里
  "functionRoot": "./functions",
  // 更多相关配置查文档
  "functions": [
    {
      // 普通部署时安装依赖
      "installDependency": false,
      // 入口文件
      "entry": "app.js",
      // 忽略文件
      "ignore": ["*.md", "node_modules", "node_modules/**/*"]
    }
  ],
  "region": "ap-shanghai"
}

该方式因为要安装所有依赖,所以是最慢的
应用场景:第一次提交到云函数

下载云函数代码

本应该创建的时候就执行部署nest模板 + 依赖安装的,但是既然安装失败就进行手动安装(部署 + 依赖),现在下载云函数代码才是开始

# 因为我们刚部署+安装依赖, 所以有cloudbaserc.json文件 ✔️
tcb fn code download nest-starter

# 如果是已经再云函数部署好的
# 安装到当前目录
tcb fn code download nest-starter ./ 
  • 会多出如下文件,也就是我们刚刚部署好的

这才是我们真正开发的地方👺,整理一下,把之前的都除了cloudbaserc.jsonpackage.json都可以删了,因为之前部署+依赖安装过云函数里的package.json会被修改,用保留的替换内容后进入目录即可运行

部署

场景:代码修改了、配置文件(cloudbaserc.json)修改了,没有更新依赖(修改的是function/下的文件)

  • 随便修改代码后,使用tcb cli快速部署
tcb fn deploy nest-starter
	-all 所有函数
	--force 强制覆盖同名函数

更新代码

只会更新代码(修改的是function/下的文件)

tcb fn code update nest-starter

使用vs code插件

  1. 搜索并安装:Tencent CloudBase Toolkit

  2. 按照它的提示就能直接用了,等价于TCB cli,看个人习惯,懒人工具罢了😀

还是贴一波官方文档:https://docs.cloudbase.net/vscode/function

xiaoqinvar的cloudbase-nest-template

我的模板修改了以上信息,并添加了一些友好的参数和文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值