Netlify 免费部署云函数。
简介
Netlify 类似于 Vercel。更多信息请自定阅读官网介绍。
Netlify 每个月有 100G 带宽,300 分钟免费构建时间。
前置准备
- NodeJs 18.x+
- Git
编写无服务函数说明
使用 js 编写。Netlify 提供了两种函数,分别为 Functions 和 Edge Function,这里我们只介绍 Function。
默认函数目录为 YOUR_BASE_DIRECTORY/netlify/functions
。Netlify 将在每次构建期间访问 functions 目录,并每个支持的代码文件并将其部署为函数。您可以将函数文件直接存储在 functions 目录下或专用于函数的子目录中。如果选择子目录,则函数入口文件必须命名为 index 或与子目录同名。例如,以下任何文件都将创建一个名为 “hello” 的函数:
- netlify/functions/hello.mjs
- netlify/functions/hello/hello.mjs
- netlify/functions/hello/index.mjs
函数运行环境说明
Netlify 函数在 Node.js 中运行,Node.js 18.0.0 是所需的最低版本,因为函数使用标准的 Fetch API,该 API 仅在版本 18.0.0 以及最新版本添加到 Node.js 中,当然,您可以使用 环境变量 来设置 Node.js 版本。
Node.js 支持两种不同的模块格式,它们具有不同的功能和 API: ECMAScript 模块(或 ES 模块)是 JavaScript 包的官方标准格式,而 CommonJS 则是 Node.js 特有的传统格式。
每个函数的模块格式将由其入口文件的文件扩展名决定:
- 扩展名为
.mjs
的函数总是作为 ES 模块执行。 - 扩展名为
.cjs
的函数始终作为 CommonJS 执行。 - 如果最近的
package.json
文件中设置了type: "module"
,则带有.js
扩展名的函数将作为 ES 模块执行;否则将作为 CommonJS 执行。
选择模块格式会影响函数的编写方式,尤其是在导入 npm 包时:
- CommonJS 函数不能使用静态导入来加载以 ES 模块形式编写的 npm 包,而必须使用 动态导入。
- 在引用以 CommonJS 编写的 npm 包时,ES 模块函数不能使用命名导入(例如,
import { kebabCase } from "lodash"
),而应使用默认导入(import _ from "lodash"
) - 在 ES 模块中,Node.js 内置原语(如
__dirname
和__filename
) 不可用,应使用 import.meta.url 代替。
来自官方的提示:
除非您有充分的理由选择 CommonJS,否则我们建议您选择 ES 模块,因为它是一种现代、标准、前瞻性的格式。由于边缘函数也使用这种格式,因此使用这种格式将使您的代码在两种函数类型之间具有互操作性。
获取环境变量
在 Netlify 中获取 Function 的环境变量使用 process.env.VARIABLE_NAME
,Edge Function 使用 Netlify.env.get("VARIABLE_NAME")
附
本地测试可以使用 Netlify Cli,浪子没有试过,直接 commit Github 测试的。
Netlify 云函数的返回的资源默认不支持跨域,可以进行如下设置:
1 | return { |