gpt4 book ai didi

node.js - Azure 函数在本地解析 npm 包,但不在 azure 中解析

转载 作者:行者123 更新时间:2023-12-02 08:11:16 25 4
gpt4 key购买 nike

我正在使用 Node 编写一些 azure 函数。我有以下文件夹结构(请注意,所有依赖项均在 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:

Failure Exception: Worker was unable to load function FunctionTwo: 'Cannot find > module 'lodash' Require stack: - /home/site/wwwroot/dist/FunctionTwo/index.js

通常在 Node 世界中,可以使用在父文件夹的 node_modules 中解析的依赖项。 Node 运行时将沿着目录结构遍历 node_modules 文件夹,直到找到它正在寻找的依赖项或到达文件系统的根目录。但这显然在 azure 中不起作用。

是否可以在azure中进行这项工作?

最佳答案

您可能会压缩 azf 文件夹并将其部署在 azure 上,因此 node_modules 文件夹不存在,导致找不到依赖项。

有两种方法可以解决这个问题

<强>1。 package.json 文件中存在重复的依赖项

running as a package建议防止冷启动,Azure 函数的 package.json 文件也应该具有运行函数所需的依赖项。此文件仅在部署期间用作 GitHub Actions 工作流程的一部分,您将在压缩以发布函数应用之前安装依赖项。

这有重复依赖项的缺点,但在某种程度上是一种更简单的方法

<强>2。捆绑您的功能

这有点微妙,因为没有现成的官方方法可以做到这一点。这个想法是使用像 webpack 这样的东西将你的函数捆绑到包含所有依赖项的单个文件中。

有一些实现( funcpackazure-functions-webpack-plugin )并未真正维护,但可以让您了解如何处理它们。

虽然我没有现成的 webpack 配置可供分享,但一个简单的方法是

  • 每个函数都有一个单独的入口点
  • 使用正确的 scriptFile 属性生成 function.json 文件(请参阅此 TypeScript 部分 here )
  • 根据您的用例,包含适用于 typescript、babel 等的加载器和插件

关于node.js - Azure 函数在本地解析 npm 包,但不在 azure 中解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76791246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com