typescript 支持与本地调试
typescript 支持与本地调试
- typescript 支持与本地调试
- 前言
- 支持
typescript
- 函数的本地调试
- 启用 node-terminal 调试
- invoke local
- serverless-offline
- Next Chapter
- 完整示例及文章仓库地址
前言
在上一章节,我们创建了一个 hello world
函数,并把它顺利的部署到了AWS
云上。然而真正上生产的函数项目肯定不会这么简单。
对于一个现代的 nodejs
项目来说,我们还有许多的需求:
比如我们也更想使用 typescript
来进行开发,还有我们也需要在本地搭建一套完整的模拟环境,来对我们编写的代码进行调试和测试。
比如我们要添加对应的单元测试和 CI/CD
又或者是我们的函数里面,各种第三方的依赖项的处理,js
相关的还好,但是其他那些和平台绑定的 二进制文件
,又或者是内置的 .xdb
等等一些数据文件,应该如何处理呢?请听我娓娓道来.
支持 typescript
我们想要用 ts
来编写函数进行调试和部署,幸运的是 serverless
为我们提供了开箱即用的插件:
serverless-plugin-typescript
, 这是由serverless
官方维护的ts
支持方案,推荐使用serverless-esbuild
,这是第三方编写的,使用esbuild
去编译ts
代码的方案
当然,除了插件方案之外,当然也有非
serverless
插件的传统打包方案,即直接使用tsc
或者webpack/rollup/esbuild
又或者进一步封装的tsup/unbuild
等等这些工具,直接构建出dist
产物,然后sls deploy
直接部署dist
里代码文件的方案。这个传统打包方案,我们下一篇文章《serverless nodejs 项目打包最佳实践》会详细介绍。
这些插件的用法非常简单,我们只需要在安装它们之后,再把它们注册进你的 serverless.yml
文件中就可以了。
比如 serverless-plugin-typescript
, 我们先安装 npm i -D serverless-plugin-typescript
然后在 serverless.yml
中注册:
# 注册插件,传入一个数组
plugins:- serverless-plugin-typescript
# 插件传入的 options 都在这个字段下
custom:# 可以不传值,不传默认值见 https://www.npmjs.com/package/serverless-plugin-typescriptserverlessPluginTypescript:tsConfigFileLocation: "./tsconfig.build.json"
接下来执行 sls packge
命令(sls deploy
的前置打包成压缩包步骤),插件就会自己去找当前目录下的 tsconfig.build.json
(上面tsConfigFileLocation
指定的路径)配置,去编译 ts
代码,然后打入将被上传的压缩包里。
打包后,你可以在你配置的 tsconfig
里 outDir
目录下,找到编译生成的结果,并进行校验。
函数的本地调试
我们本地环境,去调试编写的云函数,比较方便的做法,主要有 2
种:
- 一种为执行
sls invoke local -f <function name> -d/-p ...
进行直接调试 - 另外一种为通过
serverless-offline
插件,在本地构建出模拟的lambda
和api网关环境
进行调试,显然这种调试方式非常适合web
服务。
注意,因为整个项目是
typescript
编写的,而实际运行却是js
文件,所以你编译时,必须打开sourcemap
选项才能命中到ts
源码里的断点,不然只能把断点命中到.build/.esbuild
里js
产物的代码。
启用 node-terminal 调试
这个方式很简单,因为 node-terminal
开箱即用的,
-
一种方法,我们直接在
vscode
下方的终端窗口,点击加号旁边的下拉icon
,添加JavaScript 调试终端
,然后再cd
到目标目录中,执行对应的调试npm script
即可。 -
另外一种方法是利用
.vscode/launch.json
去维护我们的调试脚本,同时在vscode debug
界面进行调试。
配置类似于下方:
{"version": "0.2.0","configurations": [{"command": "npm run invoke:local","name": "[hello-world] invoke local","request": "launch","type": "node-terminal","cwd": "${workspaceFolder}/apps/hello-world"},{"command": "npm run offline","name": "[hello-world] offline","request": "launch","type": "node-terminal","cwd": "${workspaceFolder}/apps/hello-world"}]
}
下方章节的 invoke local
和 serverless-offline
都直接使用上述的 vscode
配置示例进行调试。
invoke local
sls invoke local -f <function name> -d/-p ...
这个命令是直接调用本地函数进行调试.
其中 function name
是函数名,也就是我们在 serverless.yml
中注册的名字。
后面加的 -d/-p
用来控制传入的 event
对象。
-d
是 --data
的缩写,代表直接把跟在后面的字符串作为 json
传入函数进行调用。
而 -p
(--path
的缩写)其实功能类似,不过 -p
是传入一个 json
文件的路径作为参数,读取之后传入函数进行调用,所以我更推荐使用 -p
。
serverless-offline
serverless-offline
插件是在本地模拟出一个 lambda
和 API Gateway
的环境进行部署,再起一个 http server
监听端口,这样来进行调试。
这种调试方法,其实和我们调试 express/koa
项目是非常类似的。不同的是,我们的路由不在我们的代码里进行注册,而在于 serverless.yml
里函数对应网关的配置。
serverless-offline
插件注册也非常的简单:
# 注册插件
plugins:- serverless-offlinecustom:
# 修改配置项serverless-offline:noPrependStageInUrl: truenoAuth: true
注册完成之后,使用 sls offline
命令,即可启动,看到:
Offline [http for lambda] listening on http://localhost:3000
Function names exposed for local invocation by aws-sdk:* hello: aws-http-api-ts-dev-hello┌─────────────────────────────────────────────────────────────────────────┐│ ││ GET | http://localhost:3000/ ││ POST | http://localhost:3000/2015-03-31/functions/hello/invocations ││ │└─────────────────────────────────────────────────────────────────────────┘Server ready: http://localhost:3000 🚀
出现上述结果,代表已经启动完成,此时它的调试也只需要像我们调试 express/koa/nest
那样,直接在 vscode
里打断点,即可命中。
Next Chapter
现在你已经学会了如何在本地调试代码和用 typescript
来编写函数了。
下一篇,《依赖项的处理与层的创建与注册》中,将会详细解释依赖项的处理,欢迎阅读。
完整示例及文章仓库地址
https://github.com/sonofmagic/serverless-aws-cn-guide
如果你遇到什么问题,或者发现什么勘误,欢迎提 issue
给我
相关文章:

typescript 支持与本地调试
typescript 支持与本地调试 typescript 支持与本地调试 前言支持 typescript函数的本地调试 启用 node-terminal 调试invoke localserverless-offline Next Chapter完整示例及文章仓库地址 前言 在上一章节,我们创建了一个 hello world 函数,并把它顺…...
后端面试话术集锦第 十八 篇:JVM面试话术
这是后端面试集锦第十八篇博文——JVM面试话术❗❗❗ 1. 介绍下JVM JVM主要包括:类加载器(class loader)、执行引擎(exection engine)、本地接口(native interface)、运行时数据区(Runtimedata area) 类加载器:加载类文件到内存。Class loader只管加载,只要符合文件…...

“历久弥新 | 用AI修复亚运珍贵史料”活动震撼来袭!
时隔近半个世纪,新中国第一次参与亚运会的影像资料将首次对外披露。只是年代久远,老照片老视频都有了岁月痕迹,画面不再清晰,这些珍贵史料急需你的帮助! 一、活动介绍 2023年,正值亚运110周年,…...
uni-app 之 scroll-view和swiper
uni-app 之 scroll-view和swiper <!-- vue2的<template>里必须要有一个盒子,不能有两个,这里的盒子就是 view--> <template><view><navigator url"/pages/home/home"><button style"background: #ff00f…...
Harmony网络请求工具类
使用的网络请求框架是axios 1、安装axios ohpm install @ohos/axios2、封装 import axios, { FormData } from "@ohos/axios" import fs from @ohos.file.fs import ArrayList from @ohos.util.ArrayList/*** 网络请求工具类*/ class HttpManager {baseUrl:string…...
【Python 自动化】自媒体剪辑第一版·思路简述与技术方案
大家都知道我主业是个运维开发(或者算法工程师),每天时间不多,但我又想做自媒体。然后呢,我就想了个方案,每天起来之后写个短视频的脚本,包含一系列图片和文字,然后上班的时候给它提…...
【前端】webpack打包去除console.log
0 问题 需要在打包的时候,自动地去除掉所有console.log 1 方法 // vue.config.js //... module.exports {//...config.optimization.minimizer[0].iptions.terserOptions.compress.drop_console true//... } //...也可以用if(process.env.NODE_ENV production…...

docker使用(二)提交到dockerhub springboot制作镜像
docker使用(二) dockerhub创建账号创建存储库成功!开始推送获取image名 提交成功SpringBoot项目制作Dockerfile镜像部署打jar包 dockerhub创建账号 (自认为可以理解为github一类的东西) 单击创建存储库按钮。 设定存…...
antd中Popover 气泡卡片样式修改
最近在开发react项目的一个新需求时,遇到气泡卡片Popover组件样式调整的问题,发现不管是在标签中设置className属性,还是在<Popover>标签中直接设置style属性,都不起作用。 最后搜索查阅发现要使用overlayClassName index…...

3月面试华为被刷,准备半年,9月二战华为终于上岸,要个27K不过分吧?
终于二战上岸了,二战华为也并不是说非华为不可,只是觉得心里憋着一口气,这就导致我当时有其他比较好的offer,我也没有去,就是想上岸华为来证明自己,现在也算是如愿了,来跟大伙们分享一下~ 个人情况 我本人…...

Kali之BurpSuite_pro安装配置
文章目录 配置jdk环境安装BurpSuitePro设置快捷方式启动方式 BurpSuite2021专业版本地址: 下载链接:https://pan.baidu.com/s/1PjzcukRDoc_ZFjrNxI8UjA 提取码:nwm7 我的安装工具都在/home/kali/tools/ 解压后我放在burpsuite_pro目录下 把j…...
双指针算法总结
双指针 常见的双指针有两种形式:对撞指针,左右指针。 对撞指针: 对撞指针一般用于顺序结构中,也称左右指针。 • 对撞指针从两端向中间移动。以个指针从最左端开始,另⼀个从最右端开始,然后逐渐往中间逼…...

开源照片管理服务LibrePhotos
本文是为了解决网友 赵云遇到的问题,顺便折腾的。虽然软件跑起来了,但是他遇到的问题,超出了老苏的认知。当然最终问题还是得到了解决,不过与 LibrePhotos 无关; 什么是 LibrePhotos ? LibrePhotos 是一个自托管的开源…...
Linux指令
1 Linux 系统目录结构 /bin 存放系统指令(可执行文件) /boot 存放linux系统开机引导程序 /dev 存放设备文件的地方 /etc 存放系统配置文件的地方 /home 存放用户家目录的地方。 /lib和/lib64 存放系统动态链接库的地方。 /lostfound linux文件系统下特有…...

如何在Mac电脑上安装WeasyPrint:简单易懂的步骤
1. 安装homebrew 首先需要确保安装了homebrew,通过homebrew安装weasyprint可以将需要的库都安装好,比pip安装更简单快捷。 安装方法如下: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)&qu…...

手机电脑scoket通信 手机软件 APP inventor 服务端程序python
python scoket 通信 再帮助同学坐课题的时候接触到了scoket通信,了解到这应该是基层网络通信的原理,于是就导出搜索了一下相关的资料,简单来说scoket通信就是,可以让不同设备在同一个网络环境的条件下,可以实现相互通…...
软考高级之系统架构师之系统安全性和保密性设计
今天是2023年08月31日,距离软考高级只有65天,加油! 备注:资料搜集自网络。 基础 信息必须依赖于存储、传输、处理及应用的载体(媒介)而存在。信息系统安全可以划分设备安全、数据安全、内容安全和行为安…...

FPGA实现电机转速PID控制
通过纯RTL实现电机转速PID控制,包括电机编码器值读取,电机速度、正反转控制,PID算法,卡尔曼滤波,最终实现对电机速度进行控制,使其能够渐近设定的编码器目标值。 一、设计思路 前面通过SOPC之NIOS Ⅱ实现电…...
C++中的volatile
volatile的本意是“易变的”,是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可…...

数学建模--一维插值法的多种插值方式的Python实现
目录 1.算法流程步骤 2.算法核心代码 3.算法效果展示 1.算法流程步骤 #算法的核心就是利用scipy中的interpolate来完成工作 #一共是5种一维插值算法形式: #插值方法:1.阶梯插值 2.线性插值 3.2阶样条插值 4.3阶样条插值 #"nearest"阶梯插值 #"zero&…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一:HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二:Floyd 快慢指针法(…...
简单介绍C++中 string与wstring
在C中,string和wstring是两种用于处理不同字符编码的字符串类型,分别基于char和wchar_t字符类型。以下是它们的详细说明和对比: 1. 基础定义 string 类型:std::string 字符类型:char(通常为8位)…...