【问题标题】:IntelliJ/Webstorm not finding import referenceIntelliJ/Webstorm 找不到导入参考
【发布时间】:2015-09-03 03:34:06
【问题描述】:

我的项目结构如下:

      • 脚本
        • main.js
        • foo.js

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

import 'src/scripts/foo.js'

当我单击上面的导入语句并转到 Navigate -> Declaration 时,我收到一条非常有用的消息,上面写着 Cannot find declaration to go

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

如果我将导入语句更改为相对,它完全可以工作:

import './foo.js'

但是,我们正在努力实现绝对导入,a habit we picked up from writing python apps

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

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

嗯,这有点好,因为现在我至少可以Navigate -> Declaration,但这并不理想,因为现在我无法将src 下的任何目录标记为测试、资源等。

那么为什么 IntelliJ/webstorm 让这件事变得如此困难?

【问题讨论】:

  • 相对路径是 JS 社区的事实标准,您建议的格式意味着在名为 src 的模块中找到 scripts/foo.js。你将如何以你提议的风格引用外部模块?对我来说,这似乎是一个很好的例子,偏离标准只是在寻求收益微乎其微的问题。
  • 这是一个公平的观点,我想我不知道/认为我使用的格式偏离了导入依赖项的规范方式。我在 github 上进行了一些探索,你是对的,大多数人都使用相对路径。我相信答案是远离绝对路径。如果您在下面提供答案,我会接受。

标签: javascript intellij-idea phpstorm webstorm ecmascript-6


【解决方案1】:

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

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

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

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

【讨论】:

  • 是的,我看到了对这个sources 标签的引用,但是I think I'm missing it?
  • 哇,好奇怪。我现在可以让源选项卡显示在我的项目结构窗口中。我必须基本上删除我的根模块(项目结构 -> 模块)并重新添加它。
【解决方案2】:

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

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

另请注意,文件扩展名是可选的,通常被省略。

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

【讨论】:

  • 路径可以相对于$NODE_PATH(使导入语句可移植)。
  • @loganfsmyth 我理解你为什么反对这个,因为当你需要太多的相对路径时,这表明可以在模块中抽象一些东西。但我不想要模块,因为它们带来了不必要的复杂性。那我该怎么办?
猜你喜欢
  • 2014-11-15
  • 1970-01-01
  • 2017-03-31
  • 2018-08-20
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多