当前位置: 首页 > 后端技术 > Node.js

开发函数计算的正确姿势——支持ES6语法和webpack压缩

时间:2023-04-03 14:56:29 Node.js

首先介绍一下本文中出现的几个重要概念:函数计算:函数计算是一个事件驱动的服务,通过函数计算,用户做不需要管理服务器的运行,只需要编写代码并上传即可。函数计算以弹性伸缩的方式准备计算资源和运行用户代码,用户只需为实际代码运行消耗的资源付费。有关函数计算的更多信息,请参阅。Fun:Fun是一款支持Serverless应用部署的工具,可以帮助您轻松管理函数计算、API网关、日志服务等资源。它通过一个资源配置文件(template.yml)协助您开发、构建和部署。有关Fun参考的更多文档。Fun2.0版本在部署方面下了很大功夫,提供了比较完善的功能,可以轻松顺畅地将云资源部署到云端。但对于这个版本来说,在本地开发体验方面还有很多工作要做。所以,我们决定推出FunInit来弥补这个缺憾。FunInit:FunInit作为Fun的子命令存在,只要Fun的版本大于等于2.7.0,都可以直接通过funinit命令使用。FunInit工具可以基于指定模板快速创建函数计算应用,快速体验和开发函数计算相关业务。官方会提供常用模板,用户也可以自定义自己的模板。背景阿里云函数计算是一种事件驱动的全托管计算服务。使用函数计算,您无需管理服务器等基础设施,只需编写代码并上传即可。函数计算将为您准备好计算资源,弹性可靠地运行您的代码,并提供日志查询、性能监控、告警等功能。通过函数计算,您可以快速构建任意类型的应用和服务,无需管理和运维。而且,你只需要为代码实际运行所消耗的资源付费,代码没有运行则不收费。我们在写nodejs函数的时候,往往会依赖很多第三方依赖,导致函数代码从几十兆到几百兆不等。如果代码包过大,会出现以下问题:可能会导致无法成功上传代码到函数计算服务,因为函数计算服务对代码包的大小有限制。压缩后最大不能超过50MB,解压后最大不能超过250MB。MB会导致冷启动时间变长,因为下载代码的过程变长,每次代码更新的时间变长。另外,函数计算目前只支持两个版本,nodejs8和nodejs6。这两个版本都不支持es6语法,但是我们习惯了es6语法怎么办?熟悉nodejs的同学应该都知道项目工程管理工具webpack,我们可以通过webpack将es6代码完全编译成es5,并切割打包成js文件,然后将js文件上传到函数计算中运行。快速入门这里我提供一个好玩的模板,帮助快速搭建一个函数计算nodejs项目骨架,支持es6代码编译成es5,并剪切打包压缩成js文件,然后将js文件上传到函数计算中运行。操作步骤如下:1.安装nodecurl-o-https://raw.githubusercontent.com/creationix/nvm/v0.33.5/install.sh|bashnvminstall82.安装fun工具npminstall@alicloud/fun-gfuntool的一些子命令,可能会用到docker,所以需要安装docker。详情请参考文档:趣味安装教程。3.通过fun模板funinit-ndemo生成项目骨架https://github.com/muxiangqiu/fc-skeleton-nodejs8.git项目生成后在根目录下有一个README.md文件。你可以阅读这个文件帮助你快速了解项目骨架为你做了什么,以及相关的命令。具体细节:README.md。4.安装依赖cddemo#切换到项目根目录下,后面的所有命令都在项目根目录下执行npminstall注意:安装一些特殊的npm模块可能会依赖于当前系统环境,为了正确安装函数runtime系统环境的npm模块可以通过funinstall命令来实现,比如puppeteer。具体可以参考:开发函数计算的正确姿势——安装第三方依赖。5.编译#生产编译npmrunbuild#开发编译(这种编译方式不会混淆代码,生成sourcemap信息,方便开发调试)npmrundev6.本地运行函数funlocalinvokedemo/demo7。运行调试函数在运行调试之前,请使用npmrundev命令编译源代码,然后作为调试器运行函数:funlocalinvoke-d3000演示程序会提示您进入函数的事件,如果不需要输入,可以按ctrl+d跳转输入后,程序不会继续执行,只有连接上vscode的连接后,程序才会继续执行。如何通过vscode连接并开始调试?如下图所示:8.部署函数将函数部署到云端时,需要用到AK等信息,可以通过funconfig进行配置。如果您配置了它,请忽略它。部署函数命令如下:fundeploy总结通过函数工程工程化,可以让我们的函数代码体积变小,代码可能从100MB左右减少到KB级别。无论是冷启动延迟,还是代码的更新上传效率,都有了很大的提升。此外,您还可以根据自己的业务场景,定义自己的趣味模板。相关链接FunInit自定义模板开发函数计算的正确姿势——使用FunInit初始化项目函数计算开发的正确姿势——使用FunLocal在本地运行调试开发函数计算正确姿势——安装第三方依赖Webpack文档本文作者:穆相秋阅读原文正文正文为云栖社区原创内容,未经许可不得转载。