将课程变成haxelib之后“找不到类型”

时间:2016-02-04 21:14:18

标签: compiler-errors namespaces package haxe haxelib

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

我正在尝试通过关注this page将一些代码作为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。具有讽刺意味的是,FlashDevelop在用{+ 1}}光标的情况下按下Ctrl + Shift + 1自动添加该行。此外,我可以在myclass行的红色下划线部分按F4,然后从新位置打开import就好了。

该文件包含:

myclass.hx

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

package mynamespace;

同时,haxelib.json文件有:

import mynamespace.myclass;

我尝试的事情:

  1. 即使我认为它应该在这一点上起作用,我尝试了下一步创建一个zip文件并在其上使用{ "name": "mylibraryname", "url" : "...", "license": "MIT", "tags": ["haxe"], "description": "...", "version": "0.0.1-alpha", "classPath": "mynamespace/", "releasenote": "...", "contributors": ["me"], "dependencies": { ... } } 。没有变化。

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

  3. 为了确保某处没有拼写错误,我填写了mynamespace目录的副本(已在mylibraryname中正确安装并制作了...\haxe\lib\mylibraryname\0.0.1-alpha个文件其中.current,BTW)回到我的项目中。编译得很好。

  4. 即使文档中没有提到,我看到另一个库包含0.0.1-alpha文件haxelib.xmlhaxelib.json,其中包含this。无论是否存在此文件,都不会更改。 (甚至没有代码完成,它可以很好地列出我的类的唯一和继承变量,但在输出窗格中生成与编译期间完全相同的Type not found错误。)

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

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

  7. 如何让我的项目进行编译?为什么Haxe在FlashDevelop和haxelib做的时候没有看到它,当我的lib的目录结构和haxelib.json在工作的第三方haxelibs和docs之后建模?

    或者我误解了某些东西,你必须在项目环境中测试haxelib,直到它们被发布为真实的?如果是这种情况,我不确定应该采用haxelib devhaxelib install mylib.zip步骤应该做些什么。

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

您的库的结构以及使用haxelib dev进行设置似乎是合理的,我可以使用这样创建的自定义库来编译项目。

我唯一能想到的是package里面的myclass.hx声明不正确(也许你在移动文件时忘了调整它?)。

仔细检查该文件中的第一行是这样的:

package mynamespace;

答案 2 :(得分:1)

也许你可以尝试这样做:

  1. 在HaxeToolkit \ haxe \ lib中创建一个包含库名称的文件夹(我将调用它&#34; example-lib&#34;,您可以随意调用它)。

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

  3. 创建一个名为&#34; .current&#34;的文件在example-lib文件夹中(如果你不能,尝试从另一个haxelib文件夹中复制一个并粘贴到你的文件夹中)并在里面输入版本名称(例如:0.0.1)。

  4. 在Project.xml中,添加

    <haxelib name="example-lib" />