1

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

为了添加一些上下文,这是我直接从 Moralis YouTube 页面关注的原始教程视频。

用这个简单的代码生成 NFT(这可以让你赚到数百万)第 1 部分

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

Moralis Mutants NFT 合集 | 生成艺术引擎

这是我运行“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

4

2 回答 2

0

我找到了罪魁祸首!所以发生的事情是,在“Base_head”的一个图层文件夹中,我有 5 个文件夹用于 5 个不同的稀有度级别,但是我只有 2 个基本头选项,所以我有一个“普通”的图像,一个“传奇”的图像”并将其他 3 个稀有文件夹留空用于“Base_head”层,因为我没有其他基础头。我认为某个图层稀有度的文件夹是否为空并不重要。所以我通过用相同的图像填充其他 3 个稀有文件夹来测试这是否是一个问题,用于“普通”稀有“基础头”-> 所以稀有“普通、不常见、稀有和超级稀有”得到相同的图像和然后我将第二张图片保存在传奇的稀有文件夹中。这似乎可以解决它。我尝试了一些不同的东西,尝试降低图像的分辨率,认为也许是

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

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

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

于 2021-11-18T11:13:41.213 回答
0

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

看起来问题源于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阵列出现故障。

于 2021-11-18T07:35:33.373 回答