超级个体必备——云函数FC快速部署 Nest.js 服务
背景:Nest.js 默认模板的“坑”
之前写了 Next.js 的部署方法《超级个体必备——云函数FC快速部署 Next.js 服务》,这次写一下 Nest.js 的,FC 就能覆盖差不多所有的场景了,基本就齐活了。
部署流程
- 本地初始化 Nest.js 项目;
- 项目上传到 Git;
- 基于
Nest.js 模板创建 FC 应用; - 绑定 Git 仓库自动部署;
上面这几部就不展开了,可以参考 Next.js 的那篇文章,最关键的是修改构建命令,如下:
-
调整构建命令(默认情况下路径存在问题,需手动修正):
- 在路径
./下运行npm install - 在路径
./下运行npm run build
- 在路径
-
调整代码包路径
- 设置代码包路径为
./。注意不是./dist,否则会报类似下面的错误,我至今也不知道是怎么回事。
- 设置代码包路径为
{
"RequestId": "1-680270bf-157fdf08-44fe63d29483",
"Code": "CAExited",
"Message": "Function instance exited unexpectedly(code 1, message:operation not permitted) with start command 'node main'.\nLogs:node:internal/modules/cjs/loader:1147\r\n throw err;\r\n ^\r\n\r\nError: Cannot find module '@nestjs/core'\r\nRequire stack:\r\n- /code/main.js\r\n\u001B[90m at Module._resolveFilename (node:internal/modules/cjs/loader:1144:15)\u001B[39m\r\n\u001B[90m at Module._load (node:internal/modules/cjs/loader:985:27)\u001B[39m\r\n\u001B[90m at Module.require (node:internal/modules/cjs/loader:1235:19)\u001B[39m\r\n\u001B[90m at require (node:internal/modules/helpers:176:18)\u001B[39m\r\n at Object.\u003Canonymous\u003E \u001B[90m(/code/\u001B[39mmain.js:3:16\u001B[90m)\u001B[39m\r\n\u001B[90m at Module._compile (node:internal/modules/cjs/loader:1376:14)\u001B[39m\r\n\u001B[90m at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)\u001B[39m\r\n\u001B[90m at Module.load (node:internal/modules/cjs/loader:1207:32)\u001B[39m\r\n\u001B[90m at Module._load (node:internal/modules/cjs/loader:1023:12)\u001B[39m\r\n\u001B[90m at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:135:12)\u001B[39m {\r\n code: \u001B[32m'MODULE_NOT_FOUND'\u001B[39m,\r\n requireStack: [ \u001B[32m'/code/main.js'\u001B[39m ]\r\n}\r\n\r\nNode.js v20.11.0"
}
- 运行时:启动命令
- 端口记得改成 3000
- 命令改为
node ./dist/main.js或者在项目里新建一个bootstrap文件,输入下面的代码
#!/bin/bash
node ./dist/main.js
改完上面这些,部署一下,看看是否能正常访问,就可以了。
总结
之所以想折腾 Nest.js,还是因为用 Express 手搓太麻烦了,而且相加 ts 也比较麻烦。
我一般用 Nest.js 做一些纯接口服务,比如服务端调用请求绕过跨域限制、服务端封装一些 SDK,以接口的形式暴露出来,还有一些通用的服务。
搞起来也不算麻烦,就是开发的时候有 ts,还是会稍微麻烦点的。
不过这正是想要的效果,强约束嘛~
对了,默认的构建环境中 Nodejs 的版本是 20.8.1,npm 的版本是 10.1.0,本地开发的时候尽量用一致的。
关注我,掌握更多云开发省钱妙招和 AI 提效技巧~