首页 文章

IntelliJ / Webstorm无法找到导入参考

提问于
浏览
3

我有以下项目结构:

  • root

  • src

  • 个脚本

  • main.js

  • foo.js

在我的 main.js 文件中,我正在导入 foo.js ,如下所示:

import 'src/scripts/foo.js'

当我点击上面的import语句并转到 Navigate -> Declaration 时,我收到一条超级有用的消息,上面写着 Cannot find declaration to go .

这使得使用起来非常令人沮丧,因为编辑器基本上不知道哪些文件导入其他文件 . 这意味着我无法使用IDE的有用功能,例如在移动文件,查找用法等时搜索引用

如果我将import语句更改为相对语句,则它完全起作用:

import './foo.js'

但是,我们正在努力争取绝对进口,a habit we picked up from writing python apps .

我遇到了Webstorm: "Cannot Resolve Directory",这让我想到 mark 我的 src 目录为 Sources Root . 这样做之后,我可以将 main.js 中的import语句更改为

import '/scripts/foo.js' //notice the leading forward slash

嗯,这有点好,因为现在我至少可以 Navigate -> Declaration 但它's not ideal because now I can't标记 src 下面的任何目录作为测试,资源等 .

那么为什么IntelliJ / webstorm让这么难做呢?

2 回答

  • 3

    我非常建议不要在JavaScript代码中使用这种导入方式 . 虽然可能可行,但相对路径是所有NodeJS代码中的事实标准,并且已经扩展到使用模块系统的所有JS代码 .

    在当前系统中,以 . 开头的任何路径都是相对路径,任何以 / 开头的路径都是绝对路径,任何其他路径都将解析为模块 . 通过该逻辑,相对于名为 src 的依赖模块, import 'src/scripts/foo.js' 将被解析为 ./scripts/foo.js .

    另请注意,文件扩展名是可选的,通常不用处理 .

    如果你想使用这种风格并且你的模块加载器支持它,你当然可以自由地这样做,但我想强调你可能会通过使用非标准方法给自己带来痛苦 .

  • 0

    因为现在我无法将src下的任何目录标记为测试,资源等 .

    是的你可以 . 无法在“项目视图”中标记已标记文件夹的子文件夹 . 但您可以在项目结构中执行此操作(Ctrl Shift Alt S) . 转到 Modules ,选择您的模块并切换到 Sources 选项卡 . 现在您可以将 src 文件夹标记为 Sources (您已经这样做了)并将 src/test 标记为 Tests 等 .

    根据Web Help,在WebStorm中,此设置隐藏在 Settings > Directories 而不是项目结构中 .

    这是另一个仅使用项目视图的解决方案:取消标记源文件夹,标记测试/资源子文件夹,然后再次标记(父)源文件夹 . 我不确定,为什么它不起作用 .

相关问题