"Type not found" 将 class 变成 haxelib 之后

"Type not found" after turning class into a haxelib

TL;DR:在我的项目目录之外,与 haxelib dev 一起安装,并像任何其他库一样包含在 Project.xml 中,我的库不是被 Haxe 编译器看到。在我的项目目录中,它工作正常。显然其他库不必在我的项目目录中以避免编译器错误,所以我在这里缺少什么?

我正在尝试按照 this page.

发布一些代码作为 haxelib

我最初的包命名空间是 flixel.addons。该代码作为另一个项目的一部分,位于其 source/flixel/addons 子目录下。在我开始之前,它是编译好的项目的一部分。

我决定在发布时最好不要侵犯别人的命名空间,所以我在 class 文件的 package 行将命名空间更改为 mynamespace。我查看了另一个 haxelib 的想法,发现库名称可以与 class 路径不同,这可能应该与包命名空间相同。所以我将代码从我的项目中移出,放到其他地方的新目录中:

mylibraryname
\-Readme.md
\-haxelib.json
\-mynamespace
  \-myclass.hx

根据说明,我 运行 haxelib dev 的路径为 mylibraryname

在我的项目中,我将<haxelib name="mylibraryname" />添加到Project.xml。在我使用它的地方,我将 import 行从 flixel.addons.myclass 更改为 mynamespace.myclass

现在,尝试编译我的项目(在 FlashDevelop 中,使用 Haxe 3.2.1)出现错误,Type not found: mynamespace.myclass 在使用它的 import 行。具有讽刺意味的是,FlashDevelop 自动添加了该行,并在使用光标的 myclass 上按下了 Ctrl+Shift+1。此外,我可以在 import 行的红色下划线部分按 F4,它会从新位置打开 myclass.hx

该文件包含:

package mynamespace;

我使用它的项目文件包含:

import mynamespace.myclass;

同时,haxelib.json 文件有:

{
  "name": "mylibraryname",
  "url" : "...",
  "license": "MIT",
  "tags": ["haxe"],
  "description": "...",
  "version": "0.0.1-alpha",
  "classPath": "mynamespace/",
  "releasenote": "...",
  "contributors": ["me"],
  "dependencies": {
    ...
  }
}

我试过的东西:

  1. 尽管我认为此时它应该可以正常工作,但我还是尝试了创建一个 zip 文件并在其上使用 haxelib install 的下一步。没有变化。

  2. 我的项目中也碰巧还有一个目录mynamespace,但我真的不需要里面的任何东西了,所以我删除了它。没有变化。

  3. 为了确保某处没有拼写错误,我复制了 mylibraryname 目录(已正确安装在 ...\haxe\lib\mylibraryname[=36=].0.1-alpha 中并制作了 .current 文件,里面有 0.0.1-alpha,顺便说一句)回到我的项目中。编译正常。

  4. 尽管文档中没有提及,但我看到另一个库在 haxelib.json 旁边包含一个文件 haxelib.xml,其中包含 this。有或没有这个文件存在,没有变化。 (甚至没有代码完成,它可以很好地列出我的 class' 唯一和继承的变量,但在编译期间在输出窗格中生成完全相同的 Type not found 错误。)

  5. haxelib selfupdate。已经是最新的了。没有变化。

  6. Windows重启!为什么不?没有变化。

如何编译我的项目?为什么 Haxe 在 FlashDevelop 和 haxelib 看到它时看不到它,而当我的 lib 的目录结构和 haxelib.json 是在使用第三方 haxelib 和文档后建模时?

或者我误解了什么,你必须在项目的上下文中测试 haxelibs,直到它们真正发布?如果是这种情况,我不确定 haxelib devhaxelib install mylib.zip 步骤应该做什么。

您的库的结构和使用 haxelib dev 进行设置似乎很合理,而且我能够使用这样创建的自定义库来编译项目。

我唯一能想到的就是myclass.hx里面的package声明错误(可能是你搬文件的时候忘记调整了?)

仔细检查该文件中的第一行是否如下所示:

package mynamespace;

也许你可以尝试这样做:

  1. 在HaxeToolkit\haxe\lib中创建一个以你的图书馆名称命名的文件夹(我将其命名为"example-lib",你可以随意命名)。

  2. 在 example-lib 文件夹中创建另一个文件夹,标题为版本名称(例如:0,0,1(注意逗号))并将您的 类在里面。

  3. 在 example-lib 文件夹中创建一个名为“.current”的文件(如果不能,请尝试从另一个 haxelib 文件夹复制一个并粘贴到您的文件夹中)并在其中输入版本名称(例如:0.0.1)。

  4. 在您的Project.xml中添加

    <haxelib name="example-lib" />

问题应该是haxelib.json中的classPath指令。

它的值应该是 root/base 包中模块的相对搜索路径,而不是你的包的路径。

尝试将其更改为 "" 或完全省略该指令。