ImportModuleError","errorMessage":"Error: Cannot find module while using Netlify lambda functions with dependencies

问题描述 投票:0回答:4

我正在尝试使用 netlify 及其 lambda 函数功能来运行具有依赖项的节点函数。基于 https://css-tricks.com/using-netlify-forms-and-netlify-functions-to-build-an-email-sign-up-widget/ ,我在我的函数/提交创建.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 网站功能选项卡(上面的截图)时,我看到:

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"]}

我的 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"
}
 }

包结构如下:

这是回购协议:

https://github.com/kc1/test2

我已经尝试将节点模块文件夹和 package.json 放在多个位置并重新推送 repo,但我仍然收到上述错误。我做错了什么?

编辑:

请参阅Netlify:未找到构建命令,继续发布以获取有关构建过程的新信息

javascript node.js netlify
4个回答
1
投票

package.json
里应该只有一个
base directory
。如果这不起作用,请尝试删除
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/[email protected]/browser.min.js

如果这不起作用,我会尝试

Run a local development environment
以更好地调试并查看您在生产环境中实际获得的包。

https://docs.netlify.com/cli/get-started/#run-a-local-development-environment

我能想到的最后一件事是检查

Node.js
Require()
是否可以找到
node_modules
但这是一个真正的远景:

https://www.bennadel.com/blog/2169-where-does-node-js-and-require-look-for-modules.htm


1
投票

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


1
投票

我认为这个错误有很多原因,我今天得到它并尝试了Error: Cannot find module ‘node-fetch’”部署函数时;Netlify Functions Can't find module;和 不能在 lambda 函数中使用 node-fetch

  • 在项目根目录下安装依赖
  • 在功能特定的文件夹中安装 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 函数游乐场复制 Fetch 示例是否可行,并且确实如此。问题是我的函数中有一个名为

static

的变量
const static = ['/blog', '/about', '/'];

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

Error: Cannot find module 'node-fetch'

我不知道为什么,但是将其更改为其他内容可以解决问题。


0
投票

我遇到了同样的问题并通过删除站点、从我的存储库中删除 node_modules 并从一个新站点重新开始来修复它。我试图重新创建问题以查看是否单独删除 node_modules 可以解决它,但是当我重新创建它时我没有遇到同样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.