返回

以大胆假设和小心求证,推动小程序云函数与自研框架的协同进化

前端

在原生开发中,文件太多一直是一个令人头疼的问题。为了解决这个痛点,笔者自己开发了一套单文件解析框架。详情请参阅《介绍一个小程序预处理器》。在开发该框架时,微信尚未推出云开发。因此在最初的设计中,笔者完全没有考虑到云开发相关的内容。这次,笔者将记录下为了兼容云开发而进行的一些调整。

每次执行 npm run dev 时,都会清空 dist 目录下所有文件。这在本地开发时没有问题,但在使用云函数时,这个操作会导致云函数无法正常工作。因为云函数的执行环境与本地开发环境不同,云函数的执行环境中没有 dist 目录。为了解决这个问题,笔者将清空 dist 目录的操作移到了 npm run build 中。这样,只有在构建生产环境代码时才会清空 dist 目录。

在本地开发时,笔者使用的是 webpack-dev-server 来启动开发服务器。在使用云函数时,需要使用云函数的内置开发服务器来启动开发服务器。云函数的内置开发服务器与 webpack-dev-server 有所不同。因此,笔者需要对 webpack 配置进行一些调整,以使其能够与云函数的内置开发服务器兼容。

在本地开发时,笔者使用的是 hot module replacement (HMR) 来实现热更新。在使用云函数时,HMR 不再可用。因此,笔者需要使用其他方式来实现热更新。笔者选择使用了一种名为 cloud-hot-middleware 的中间件来实现热更新。

对云函数的内置开发服务器进行配置后,还需要对 webpack 配置进行一些调整。具体来说,笔者需要将 webpack 的 output.publicPath 属性设置为 "/dist/"。这将告诉 webpack 将所有静态文件输出到 "/dist/" 目录下。

完成这些调整后,笔者就可以在云函数中使用自研框架了。不过,在使用过程中,笔者发现了一个问题。在云函数中,笔者无法使用 require() 函数来导入模块。这是因为云函数的执行环境与 Node.js 的执行环境有所不同。云函数的执行环境中没有 Node.js 的全局对象,因此无法使用 require() 函数。

为了解决这个问题,笔者需要使用一种称为 CommonJS 模块化的方式来导入模块。CommonJS 模块化是一种将模块组织成文件的方式。每个模块都是一个单独的文件,并且每个模块都有自己的作用域。要使用 CommonJS 模块化,需要使用 require() 函数来导入模块。

对 webpack 配置进行一些调整后,笔者就可以在云函数中使用 CommonJS 模块化了。这样,笔者就可以在云函数中使用自研框架了。

通过以上调整,笔者已经可以在云函数中使用自研框架了。不过,笔者发现了一个问题。在云函数中,笔者无法使用 import() 函数来导入模块。这是因为云函数的执行环境与 Node.js 的执行环境有所不同。云函数的执行环境中没有 Node.js 的全局对象,因此无法使用 import() 函数。

为了解决这个问题,笔者需要使用一种称为 ES 模块化的方式来导入模块。ES 模块化是一种将模块组织成文件的方式。每个模块都是一个单独的文件,并且每个模块都有自己的作用域。要使用 ES 模块化,需要使用 import() 函数来导入模块。

对 webpack 配置进行一些调整后,笔者就可以在云函数中使用 ES 模块化了。这样,笔者就可以在云函数中使用自研框架了。

通过以上调整,笔者已经可以在云函数中使用自研框架了。笔者希望这篇文章能够对其他开发者有所帮助。