TL;DR:在我的项目目录之外,与haxelib dev
一起安装,并像任何其他库一样包含在Project.xml
中,Haxe 编译器看不到我的库。 在我的项目目录中,它工作正常。 显然,其他库不必在我的项目目录中以避免编译器错误,那么我在这里缺少什么?
我正在尝试通过遵循此页面将一些代码作为 haxelib 发布。
我最初将我的包命名空间作为flixel.addons
. 该代码作为不同项目的一部分,位于其source/flixel/addons
子目录下。 在我开始之前,该项目是编译得很好的一部分。
我决定在发布时最好不要入侵其他人的命名空间,所以我将命名空间更改为 mynamespace
在我的类文件的package
行上。 我查看了另一个 haxelib 以获取想法,发现库名称可以与类路径不同,类路径可能应该与包命名空间相同。 所以我把代码从我的项目中移出,移到其他地方的新目录中:
mylibraryname
-Readme.md
-haxelib.json
-mynamespace
-myclass.hx
按照说明,我haxelib dev
运行了通往mylibraryname
的路径。
在我的项目中,我向 Project.xml 添加了<haxelib name="mylibraryname" />
。 在我使用它的地方,我将import
行从 flixel.addons.myclass
更改为 mynamespace.myclass
.
现在,尝试编译我的项目(在FlashDevelop中,使用Haxe 3.2.1(会给出错误,Type not found: mynamespace.myclass
使用它的import
行上。 具有讽刺意味的是,FlashDevelopment自动添加了该行,按下Ctrl + Shift+1并将光标放在使用它myclass
。 此外,我可以在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": {
...
}
}
我尝试过的事情:
尽管我认为它此时应该可以工作,但我尝试了下一步创建 zip 文件并在其上使用
haxelib install
。 没有变化。我的项目中也碰巧还有一个目录
mynamespace
,但我不再需要其中的任何内容,所以我删除了它。 没有变化。为了确保某处没有错别字,我将
mylibraryname
目录的副本(已在...haxelibmylibraryname .0.1-alpha
中正确安装并制作了一个包含0.0.1-alpha
的.current
文件,顺便说一句(放回我的项目中。 它编译得很好。尽管文档中没有提到,但我看到另一个库包含一个文件
haxelib.xml
haxelib.json
,包含这个。 无论是否存在此文件,都不会发生任何更改。 (甚至不是代码完成,它可以很好地列出类的唯一变量和继承变量,但在"输出"窗格中生成与我在编译期间得到的完全相同的Type not found
错误。haxelib selfupdate
. 已经是最新的了。 没有变化。视窗重启! 为什么不呢? 没有变化。
如何编译我的项目? 为什么当FlashDevelop和haxelib看到它时,当我的库的目录结构和haxelib.json
是按照第三方haxelibs和文档建模时,Haxe看不到它?
还是我误解了什么,你必须在项目的上下文中测试 haxelibs,直到它们真正发布? 如果是这种情况,我不确定应该用haxelib dev
和haxelib install mylib.zip
步骤做什么。
问题应该是haxelib.json
中的classPath
指令。
它的值应该是根/基包中模块的相对搜索路径,而不是包的路径。
尝试将其更改为""
或完全省略该指令。
您的库的结构和用haxelib dev
设置它似乎很合理,我能够使用像这样创建的自定义库编译一个项目。
我唯一能想到的是myclass.hx
内部的package
被错误地声明了(也许你在移动文件时忘记调整它了?
仔细检查该文件中的第一行是否如下所示:
package mynamespace;
也许你可以尝试这样做:
-
在HaxeToolkit\haxe\lib中创建一个带有库名称的文件夹(我称之为"example-lib",你可以随心所欲地称呼它(。
-
在 example-lib 文件夹中创建另一个带有版本名称标题的文件夹(例如:0,0,1(注意逗号((,并将您的类放入其中。
-
在 example-lib 文件夹中创建一个名为".current"的文件(如果不能,请尝试从另一个 haxelib 文件夹中复制一个并粘贴到您的文件夹中(,然后在其中输入版本名称(例如:0.0.1(。
-
在项目.xml中,添加
<haxelib name="example-lib" />