2015-06-17 37 views
3

我有以下项目结构:的IntelliJ/Webstorm没有找到进口参考

    • 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但因为现在我不能标记任何目录下src它的效果并不理想作为测试,资源等。

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

+1

相对路径是JS社区的事实标准,您提出的格式含义是在名为src的模块内找到'scripts/foo.js'。你如何引用你提出的风格的外部模块?对我来说,这似乎是一个很好的例子,其中偏离标准只是以最小的利益来要求问题。 – loganfsmyth

+0

这是一个公平点,我想我不知道/考虑我使用的偏离导入依赖的规范方式的格式。我在github上做了一些动作,你说的对,大多数人都使用相对路径。我相信答案是摆脱绝对路径。如果您在下面提供答案,我会接受它。 –

回答

0

我非常反对在JavaScript代码中使用这种导入方式。虽然潜在可行,但相对路径是所有NodeJS代码中的事实标准,并已扩展到基本上所有使用模块系统的JS代码。

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

还要注意,文件扩展名是可选的并且通常被忽略。

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

+2

路径可以相对于'$ NODE_PATH'(使得import语句可移植)。 – jcalfee314

+0

@loganfsmyth我明白你为什么主张这一点,因为当你需要太多的相对路径时,这表明可以在模块中抽象出某些东西。但是我不需要模块,因为它们带来了不必要的复杂性。那我该怎么办? – froginvasion

2

因为现在我不能标记任何SRC作为测试,资源下面的目录等

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

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

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

+0

是的,我已经看到了对这个'sources'选项卡的引用,但是[我想我错过了它?](http://i.imgur.com/lRnh5hF.png) –

+0

我已经用两个更新了我的答案其他解决方案 –

+0

哇,很奇怪。我现在可以在我的项目结构窗口中显示源选项卡。我不得不基本删除我的根模块(项目结构 - >模块)并重新添加它。 –