Netlify 免费部署云函数。

简介

Netlify 类似于 Vercel。更多信息请自定阅读官网介绍。

Netlify 每个月有 100G 带宽,300 分钟免费构建时间。

前置准备

  • NodeJs 18.x+
  • Git

编写无服务函数说明

使用 js 编写。Netlify 提供了两种函数,分别为 FunctionsEdge 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
2
3
4
5
6
7
8
9
return {
statusCode: 200,
headers: {
'Content-Type': 'application/json',
// 支持所有跨域请求 或者 选择性支持
'Access-Control-Allow-Origin': '*' || 'Access-Control-Allow-Origin': '你的域名'
},
body: JSON.stringify(data),
};

本站由 江湖浪子 使用 Stellar 1.29.1 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。