bounty还有4天到期。回答此问题可获得+100声望奖励。d512希望引起更多的注意这个问题。
我正在使用node编写一些azure函数。我有以下文件夹结构(注意,所有依赖项都在package.json
中声明,该package.json
位于azure函数所在的文件夹上方)。
|-- package.json
|-- node_modules /* dependencies for all code in sub-folders lives here */
|-- server/
|-- src/
|-- azf/
|-- host.json
|-- local.settings.json
|-- tsconfig.json
|-- package.json /* only npm scripts in this file, no dependencies */
|-- FunctionOne/
|-- function.json
|-- index.ts
|-- FunctionTwo/
|-- function.json
|-- index.ts
字符串
当我运行时,此设置在本地工作正常
func start
型
但是当我通过github操作将这些函数部署到azure时,函数中的代码会抛出找不到依赖项的错误。例如,它无法在运行时找到lodash
:
失败例外:Worker无法加载函数FunctionTwo:'Cannot find > module 'lodash'需要堆栈:-/home/site/wwwroot/dist/FunctionTwo/index.js
一般来说,在节点世界中,使用在父文件夹的node_modules
中解析的依赖关系是可以的。节点运行时将在目录结构中遍历node_modules
文件夹,直到找到它要查找的依赖项或到达文件系统的根。不过,这在Azure中显然行不通。
有没有可能在Azure中实现这个功能?
1条答案
按热度按时间j5fpnvbx1#
您可能压缩了
azf
文件夹并将其部署在azure上,因此node_modules
文件夹不存在,导致找不到依赖项。有两种方法可以解决这个问题
1.其
package.json
文件中的依赖重复由于建议作为包运行以防止冷启动,因此Azure函数的
package.json
文件也应该具有运行函数所需的依赖项。此文件仅在部署期间作为GitHub Actions工作流的一部分使用,您将在压缩以发布函数应用程序之前安装依赖项。这有复制依赖项的缺点,但在某种程度上是一种更简单的方法
2.捆绑你的功能
这有点微妙,因为没有现成的官方方法来做到这一点。这个想法是使用类似webpack的东西将您的函数捆绑到单个文件中,包括所有依赖项。
有一些实现(
funcpack
和azure-functions-webpack-plugin
)并没有真正维护,但可以给予您了解如何处理它们。虽然我没有现成的webpack配置可供分享,但一个简单的方法是
scriptFile
属性生成function.json
文件(请参阅此处的TypeScript部分)