D 正在尝试导入某些模块,但无法获取;。。“这是无法阅读的”;

D 正在尝试导入某些模块,但无法获取;。。“这是无法阅读的”;,d,D,我是D新手,正在尝试创建一个带有子模块的简单启动项目。例如,我一直在遵循源代码结构,但我无法使用DUB编译我的项目 我的文件夹结构是: Ranger examples template0 <== compiling in this directory source app.d dub.json source ranger geometry package.d point.d packag

我是D新手,正在尝试创建一个带有子模块的简单启动项目。例如,我一直在遵循源代码结构,但我无法使用DUB编译我的项目

我的文件夹结构是:

Ranger
  examples
    template0     <== compiling in this directory
      source
        app.d
      dub.json
source
  ranger
    geometry
      package.d
      point.d
    package.d
ranger/package.d:

模块测距仪;
公共导入ranger.geometry;
ranger/geometry/package.d:

模块ranger.geometry;
公共导入ranger.geometry.point;
当我从
template0
目录编译时,它总是失败:

配音构建——强制

无效的源/导入路径:/home/iposthman/Documents/Development/D/Ranger/examples/template0/~/Documents/Development/D/Ranger/source

使用/home/iposthman/dlang/dmd-2.084.0/linux/bin64/dmd为x86_64执行“调试”生成

模板0~主:构建配置“应用程序”

/home/iposthman/Documents/Development/D/Ranger/source/Ranger/package.D(5,15):错误:模块
geometry
位于文件“Ranger/geometry.D”中,无法读取

导入路径[0]=源导入路径=/home/iposthman/Documents/Development/D/Ranger/source 导入路径[2]=/home/iposthman/dlang/dmd-2.084.0/linux/bin64/../../src/phobos 导入路径[3]=/home/iposthman/dlang/dmd-2.084.0/linux/bin64/../../src/druntime/import

/home/iposthman/dlang/dmd-2.084.0/linux/bin64/dmd失败,退出代码为1

  • 我不明白为什么导入路径有两条路径被打碎在一起,我不知道如何修复它
  • 我不理解涉及geometry.d的文件,因为没有一个名为geometry.d的文件——但是有一个文件夹包含一个包。。。我很困惑
  • 我的dub.json包含我认为正确的ranger源代码路径:

    {
        "authors": [
            "William Cleveland"
        ],
        "copyright": "Copyright © 2019, William Cleveland",
        "description": "A minimal D application.",
        "license": "MIT",
        "name": "template0",
        "importPaths": [
            "source",
            "~/Documents/Development/D/Ranger/source"
        ]
    }
    
    我是使用DUB错误还是配置json错误

    我不认为仅仅为了让一些基本的东西工作就使用D会这么困难。我搜索了所有模块,只找到了一些微不足道的例子


    谢谢。

    Dub不会将
    ~
    翻译到您的主目录<代码>~是POSIX语言,但dub是一个跨平台应用程序

    使用
    /home/iposthman/Documents/Development/D/Ranger/source
    。/../source


    更倾向于后者,因为当您的用户名更改或您与其他人共享您的项目时,它不会中断。

    我认为weltensturm的答案是正确的,但有点偏离。我会改变

    "importPaths": [
        "source",
        "~/Documents/Development/D/Ranger/source"
    ]
    

    基本上,您只需要再返回一个目录即可访问源代码

    我不理解涉及geometry.d的文件,因为没有一个名为geometry.d的文件——但是有一个文件夹包含一个包。。。我很困惑

    这是因为当您导入模块时,dub希望有一个同名文件或一个package.d文件,就像您在一个名为模块的文件夹中一样。因此,如果您执行
    导入foo
    在名为foo的文件夹中应该有一个名为foo.d或package.d的文件,该文件夹具有
    模块foo在它的开头。我认为您所做的是正确的,但是由于您的导入路径错误,dub在错误的位置查找geometry.d或文件夹geometry


    请注意,您始终可以使用dub将要导入的文件夹转换为包。然后运行
    dub add local./
    。然后,您可以通过执行
    “我的项目”:“~master”

    将其作为依赖项添加到另一个项目中。我不确定这是否会导致您的问题,但您的源路径应该是相对的。使用“../../../../source”不是绝对的“~/Documents/Development/D/Ranger/source”LOL。我尝试了这个组合和其他一些组合,但没有成功。如果你问题中的目录树是正确的,它会起作用,但我猜
    source
    也是
    Ranger
    的子目录?那么应该是两个
    s而不是三个。是的。尝试绝对的,但配音似乎只是附加在一起的东西。
    "importPaths": [
        "source",
        "../../../source"
    ]