Azure Functions如何支持ES6 import/export语法?
当然没问题!2019年的时候Node.js 10已经支持不少ES6特性了,配合Babel完全能在Azure Functions 2.0里用import/export语法,不用再写一堆require。下面是我整理的具体步骤,在VS Code里结合Azure Functions CLI就能顺畅跑起来:
具体配置步骤
1. 初始化项目依赖
首先在你的Azure Functions项目根目录下,先初始化npm(如果还没做的话):
npm init -y
接着安装Babel相关的开发依赖:
npm install --save-dev @babel/core @babel/cli @babel/preset-env babel-plugin-module-resolver
其中@babel/preset-env会帮你适配Node.js 10的运行环境,babel-plugin-module-resolver可以简化模块导入的路径写法。
2. 创建Babel配置文件
在项目根目录新建.babelrc文件,写入以下配置:
{ "presets": [ ["@babel/preset-env", { "targets": { "node": "10" } }] ], "plugins": [ ["module-resolver", { "root": ["./src"] }] ] }
这个配置告诉Babel按照Node.js 10的标准转译代码,同时把src目录设为模块根目录,方便你导入自己写的文件。
3. 调整项目结构
建议把所有函数代码放到src目录下,比如原来的HttpTrigger文件夹移到src/HttpTrigger。然后在根目录创建dist文件夹,用来存放Babel转译后的代码。
4. 添加转译脚本到package.json
打开package.json,在scripts字段里添加两个脚本:
"scripts": { "build": "babel src --out-dir dist", "watch": "babel src --out-dir dist --watch" }
npm run build:一次性把src里的代码转译到dist目录npm run watch:监听src目录的文件变化,自动重新转译,适合开发时实时更新
5. 配置Azure Functions CLI指向转译后的代码
在项目根目录新建local.settings.json(如果没有的话),添加以下配置:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "", "FUNCTIONS_WORKER_RUNTIME": "node", "AzureWebJobsScriptRoot": "./dist" } }
AzureWebJobsScriptRoot这个配置会告诉Functions CLI,去dist目录找要执行的函数代码。
6. 在VS Code里开发调试
- 打开VS Code终端,先运行
npm run watch,让Babel实时监听代码变化并转译 - 然后可以用VS Code的Azure Functions插件启动本地调试,或者在终端运行
func start,这样CLI就会加载dist里的转译后代码,而你只需要在src目录里用ES6的import/export写代码就行
关键注意点
- Node.js 10本身对ES模块的支持是实验性的(需要加
--experimental-modules参数),所以用Babel转译是更稳妥的方案,避免兼容性问题 - 函数入口文件要改用
export default导出,比如HttpTrigger的写法:
// src/HttpTrigger/index.js import { AzureFunction, Context, HttpRequest } from "@azure/functions"; const httpTrigger = async function (context, req) { // 你的函数逻辑 }; export default httpTrigger;
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

