错误:ENOENT,没有这样的文件或目录“未定义”

Posted

技术标签:

【中文标题】错误:ENOENT,没有这样的文件或目录“未定义”【英文标题】:Error: ENOENT, No such file or directory 'undefined' 【发布时间】:2021-12-29 00:53:40 【问题描述】:

请帮忙!我一直在到处寻找解决方案,包括在官方 Moralis 论坛上提问,到目前为止,没有人能够给我一个解决方案。我已经在这里呆了 3 天了,仍然在同一个地方。假设我花了很多时间查看这段代码,以至于我实际上开始理解它而且我什至不是程序员......到目前为止,我已经看到其他人有类似的“ENOENT”错误但是他们的后面跟着一个丢失的文件或类似的东西。然而,我的问题只是说“未定义”,并没有告诉我什么是未定义的,或者我应该如何定义它。据我所知,我在根文件夹中,我已经安装了所有依赖项,完成了“npm install”,安装了“canvas”,做了“npm init”,清理了缓存,删除了画布,重新安装了画布,删除了“node_modules”文件夹,卸载 npm,然后重新安装 npm。不管我总是遇到同样的错误。

添加一些背景信息,这是我直接从 Moralis YouTube 页面观看的原始教程视频。

Generate NFTs with this simple code (this could make you millions) PART 1

这是他们 GitHub 上的官方骨干代码,我只将视频和 GitHub 上的几行更改为我自己的链接。这是 GitHub 的链接

Moralis Mutants NFT Collection | Generative Art Engine

这是我运行“node index.js”时得到的输出

PS C:\Users\Eli\Documents\moralis-mutants-nft-engine-main> node index.js
##################
# Generative Art #
# - Generating your NFT collection
##################

-----------------
Mutating 1 of 10000
- rarity: rare
- dna: 01--02-04-02-01-010-03-03-04
C:\Users\Eli\Documents\moralis-mutants-nft-engine-main\node_modules\canvas\lib\image.js:91
  SetSource.call(img, src);
            ^

Error: ENOENT, No such file or directory 'undefined'
    at setSource (C:\Users\Eli\Documents\moralis-mutants-nft-engine-main\node_modules\canvas\lib\image.js:91:13)
    at Image.set (C:\Users\Eli\Documents\moralis-mutants-nft-engine-main\node_modules\canvas\lib\image.js:62:9)
    at C:\Users\Eli\Documents\moralis-mutants-nft-engine-main\node_modules\canvas\index.js:34:15
    at new Promise (<anonymous>)
    at loadImage (C:\Users\Eli\Documents\moralis-mutants-nft-engine-main\node_modules\canvas\index.js:23:10)
    at C:\Users\Eli\Documents\moralis-mutants-nft-engine-main\index.js:83:25
    at new Promise (<anonymous>)
    at loadLayerImg (C:\Users\Eli\Documents\moralis-mutants-nft-engine-main\index.js:82:10)
    at C:\Users\Eli\Documents\moralis-mutants-nft-engine-main\index.js:344:29
    at Array.forEach (<anonymous>)
    at saveFile (C:\Users\Eli\Documents\moralis-mutants-nft-engine-main\index.js:343:15)
    at handleFinal (C:\Users\Eli\Documents\moralis-mutants-nft-engine-main\index.js:389:31)
    at startCreating (C:\Users\Eli\Documents\moralis-mutants-nft-engine-main\index.js:392:11)
    at Object.<anonymous> (C:\Users\Eli\Documents\moralis-mutants-nft-engine-main\index.js:448:1)
    at Module._compile (node:internal/modules/cjs/loader:1097:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1149:10) 
  errno: 2,
  code: 'ENOENT',
  path: 'undefined',
  syscall: 'fopen'


Node.js v17.1.0

我现在也一直在尝试调试几个小时,这就是我在 Visual Studio Code 中运行默认调试器时得到的结果

C:\Program Files\nodejs\node.exe .\index.js                           
##################                                                    index.js:298
# Generative Art #                                                    index.js:299
# - Generating your NFT collection                                    index.js:300
##################                                                    index.js:301
-----------------                                                     index.js:316
Mutating 1 of 10000                                                   index.js:317
- rarity: rare                                                        index.js:323
- dna: 01--02-04-01-02-05-04-04-04                                    index.js:335
Uncaught Error: ENOENT, No such file or directory 'undefined'         
Process exited with code 1

【问题讨论】:

如果我们可以看到文件 C:\Users\Eli\Documents\moralis-mutants-nft-engine-main\index.js,我们可以开始跟踪堆栈跟踪并查看代码是什么涉及。问题可能是函数调用中的一些错误参数,在错误发生之前深入了一大堆层,或者在极少数情况下,模块安装错误。 @jfriend00 我包含了一个指向 github 的链接,其中包含来自 Moralis 的原始 index.js 文件。不过我会在这里再次发布,这是一个更直接的链接。如果不完全相同,我的索引文件几乎完全相同。我唯一更改的文件是 config.js 文件,这些是视频专门说要更改的少数更改,与 github 上的方向相同。 github.com/ashbeech/moralis-mutants-nft-engine/blob/main/…这个链接有全部代码。 【参考方案1】:

在与您一起调试时,我将其放入答案中只是因为我需要传达多行代码,而这些代码实际上在注释中不起作用。

看起来问题出在https://github.com/ashbeech/moralis-mutants-nft-engine/blob/main/index.js中的这段代码:

  // propagate information about required layer contained within config into a mapping object
  // = prepare for drawing
  let results = constructLayerToDna(newDna, layers, rarity);
  let loadedElements = [];

  // load all images to be used by canvas
  results.forEach((layer) => 
    loadedElements.push(loadLayerImg(layer));
  );

当它调用loadLayerImg(layer) 时,该层似乎有问题,并且不包含它应该包含的一些属性。 layer 来自 results,它来自对 constructLayerToDna() 的调用,根据评论,它正在从您的配置中读取信息。因此,配置中似乎缺少某些内容或不正确,导致results 数组出现错误。

【讨论】:

我实际上只是想通了,我会在答案中发布它,但考虑到我是如何解决问题的,我认为你刚才在代码中指出的内容是有道理的。【参考方案2】:

我找到了罪魁祸首!所以发生的事情是,在“Base_head”的一个图层文件夹中,我有 5 个不同稀有度级别的文件夹,但是我只有 2 个基本头选项,所以我有一个“普通”的图像,一个“传奇”的图像”并将其他 3 个稀有文件夹留空用于“Base_head”层,因为我没有其他基础头。我认为某个图层稀有度的文件夹是否为空并不重要。所以我通过用相同的图像填充其他 3 个稀有文件夹来测试这是否是一个问题,用于“普通”稀有“基本头”-> 所以稀有“普通、罕见、稀有和超级稀有”得到相同的图像和然后我将第二张图片保存在传奇的稀有文件夹中。这似乎可以解决它。我尝试了一些不同的方法,尝试降低图像的分辨率,考虑到程序可以处理和抽出多大的图像,这可能是某种瓶颈,但是我现在可以使用所有原始的 4320x4320px 图像及其相应的文件夹,它最终以该分辨率抽出 NFT。

简而言之,如果您有图层文件夹,每个文件夹中都有各种稀有文件夹,那么您需要确保每个文件夹中至少有一个图像。您不能将任何文件夹留空,否则由于无法在所述文件夹中找到图像而无法运行。

这实际上与您指出的 @jfriend00 一致。您提到“当它调用 loadLayerImg(layer) 时,该层似乎有问题,并且不包含它应该包含的一些属性。”

好吧,如果图层文件夹是空的,或者图层文件夹中的稀有文件夹是空的,那么程序将得出结论“图层不包含某些属性”,即图像哈哈。花了几天时间,它最终成为一个很难找到的简单修复。谢谢大家,希望这可以帮助人们走向未来!

【讨论】:

以上是关于错误:ENOENT,没有这样的文件或目录“未定义”的主要内容,如果未能解决你的问题,请参考以下文章

纱线安装错误“ENOENT:没有这样的文件或目录

proxyquire 错误:ENOENT:没有这样的文件或目录,scandir

错误:ENOENT:没有这样的文件或目录,在进行 Yarn 安装时使用 lstat

ENOENT:没有这样的文件或目录。?

反应本机调试器:“错误:ENOENT:没有这样的文件或目录”

错误:ENOENT:没有这样的文件或目录,打开 './views/s.ejs' Nodejs Express