javascript ImportModuleError”,“errorMessage”:“错误:使用具有依赖项的Netlify lambda函数时找不到模块

8dtrkrch  于 2023-04-10  发布在  Java
关注(0)|答案(4)|浏览(197)

我尝试使用netlify和它的lambda函数特性来运行一个带有依赖项的节点函数。基于https://css-tricks.com/using-netlify-forms-and-netlify-functions-to-build-an-email-sign-up-widget/,我在我的functions/submission-created.js中:

const fetch = require('node-fetch');

exports.handler = async event => {

    const email = JSON.parse(event.body).payload.EMAIL
    const asking = JSON.parse(event.body).payload.ASKING
    console.log(`Recieved a submission: ${email}`)
    ....

当我在我的netlify网站功能选项卡下查看时(上面的secreenshot),我看到:

11:40:35 PM: 2020-12-02T04:40:35.092Z   undefined   ERROR   Uncaught Exception  {"errorType":"Runtime.ImportModuleError","errorMessage":"Error: Cannot find module 'node-fetch'\nRequire stack:\n- /var/task/submission-created.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js","stack":["Runtime.ImportModuleError: Error: Cannot find module 'node-fetch'","Require stack:","- /var/task/submission-created.js","- /var/runtime/UserFunction.js","- /var/runtime/index.js","    at _loadUserApp (/var/runtime/UserFunction.js:100:13)","    at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)","    at Object.<anonymous> (/var/runtime/index.js:43:30)","    at Module._compile (internal/modules/cjs/loader.js:1015:30)","    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1035:10)","    at Module.load (internal/modules/cjs/loader.js:879:32)","    at Function.Module._load (internal/modules/cjs/loader.js:724:14)","    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)","    at internal/main/run_main_module.js:17:47"]}

my package.json(运行npm init后):

{
"name": "site",
"version": "1.0.0",
"description": "",
"scripts": {
  "test": "echo \"Error: no test specified\" && exit 1"
 },
"author": "",
"license": "ISC",
"dependencies": {
  "dotenv": "^8.2.0",
  "node-fetch": "^2.6.1"
}
 }

包结构如下所示:

下面是repo:

https://github.com/kc1/test2

我已经尝试将node modules文件夹和package.json放在多个位置并重新推送repo,但我仍然得到上面的错误。我做错了什么?
编辑:
请参阅Netlify: No build command found, continuing to publishing以获取有关构建过程的新信息

rdlzhqv9

rdlzhqv91#

base directory中应该只有一个package.json。如果不起作用,请尝试删除package-lock.json并重试。不要推送node_modules文件夹,因为Netlify运行npm install
如果你的构建需要任何JavaScript依赖项,你必须在你的存储库中的站点基目录中保存的package.json文件中列出这些依赖项。
...
默认情况下,如果您的站点的基目录不包含yarn.lock文件(更多信息见下文),我们将运行npm install来安装package.json文件中列出的依赖项。
https://docs.netlify.com/configure-builds/manage-dependencies/#javascript-dependencies
https://docs.netlify.com/configure-builds/get-started/#definitions
如果它仍然不起作用,并且是一个可接受的解决方案,您也可以下载脚本并在本地导入它。

require('./fetch.min.js')

https://cdn.jsdelivr.net/npm/node-fetch@2.6.1/browser.min.js
如果这不起作用,我会尝试Run a local development environment进行更好的调试,看看在生产环境中实际得到了什么包。
https://docs.netlify.com/cli/get-started/#run-a-local-development-environment
我能想到的最后一件事是检查Node.jsRequire()是否可以找到node_modules,但这是一个真实的的长镜头:
https://www.bennadel.com/blog/2169-where-does-node-js-and-require-look-for-modules.htm

ctzwtxfj

ctzwtxfj2#

我尝试了大多数这些选项都没有成功。最终我最终删除了网站并从我的github repo中重建它,这次没有节点模块。它构建了,现在我可以使用npm模块

50pmv0ei

50pmv0ei3#

我认为这个错误有很多原因,我今天得到了它,并尝试了一些解决方案从Error: Cannot find module ‘node-fetch’” when deploying function;Netlify Functions Can't find module;和Cannot use node-fetch in lambda function

  • 在项目根目录中安装依赖项
  • 在特定功能文件夹中安装deps,例如具有functions/testfunc/package.json并将netlify.toml中的命令更改为cd functions/testfunc && npm install && cd ../../ && npm build
  • 将const fetch = require('node-fetch')更改为:
  • const fetch = require('node-fetch').default
  • const fetch = request('node-fetch').default
  • 添加node-fetch的对等依赖项encoding

然而,这些东西都不起作用。然后我试着看看从Netlify函数Playground复制Fetch示例是否有效。问题是我的函数中有一个名为static的变量

const static = ['/blog', '/about', '/'];

由于某种原因,有一个名为static的变量会导致

Error: Cannot find module 'node-fetch'

我不知道为什么,但是把这个换成别的东西解决了这个问题。

drnojrws

drnojrws4#

我有这个相同的问题,并通过删除网站,从我的仓库中删除node_modules,并重新开始一个新的网站来修复它。我试图重新创建这个问题,看看是否单独删除node_modules可以修复它,但当我重新创建它时,我没有遇到同样的问题。

相关问题