如何在 Elm 中从嵌套的目录中导入模块?

4
如果我有这样的目录结构:
src
 ├── Commands.elm
 ├── Decoders.elm
 ├── Main.elm
 ├── Messages.elm
 ├── Models.elm
 ├── Page
 │   ├── Cats
 │   │   ├── Main.elm
 │   │   ├── Style.elm
 │   │   └── ...
 │   ├── Pieces
 │   │   ├── Main.elm
 │   │   ├── Style.elm
 │   │   └── ...
 │   └── Players
 │       ├── Main.elm
 │       ├── Style.elm
 │       └── ...
 ├── Routing.elm
 ├── Style
 │   ├── Index.elm
 │   ├── MainCss.elm
 │   └── Main.elm
 ├── Update.elm
 └── View.elm

我发现了一些示例,展示了如何从目录中导入模块,但是我找不到从子目录中导入模块的示例。 例如,在 View.elm 中如何导入 Page/Cats/Main.elm?
在Python中,我会将__init__.py放入每个嵌套目录中,将它们转换为“包”,这样我就可以像这样访问其中的模块:from Page import Cats 或 from Page.Cats import Main。在Elm中是否有类似的概念?
1个回答

5
假设srcelm-package.jsonsource-directories中,只需确保该文件中的模块名称与路径匹配,即Page.Cats.Main
module Page.Cats.Main exposing (add)

add x y = x + y

然后在 View.elm 中导入它:

import Page.Cats.Main

-- You can now call functions defined in that module like this:
-- Page.Cats.Main.add 1 2

这解决了!我之前没有意识到在暴露模块时必须镜像目录结构。感谢您快速的回复! - Rotareti
是的,模块名称必须与文件路径匹配。这就是 Elm 编译器为每个 import 查找模块文件的方式。 - Dogbert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接