我有以下项目结构:
-
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 回答
我非常建议不要在JavaScript代码中使用这种导入方式 . 虽然可能可行,但相对路径是所有NodeJS代码中的事实标准,并且已经扩展到使用模块系统的所有JS代码 .
在当前系统中,以
.
开头的任何路径都是相对路径,任何以/
开头的路径都是绝对路径,任何其他路径都将解析为模块 . 通过该逻辑,相对于名为src
的依赖模块,import 'src/scripts/foo.js'
将被解析为./scripts/foo.js
.另请注意,文件扩展名是可选的,通常不用处理 .
如果你想使用这种风格并且你的模块加载器支持它,你当然可以自由地这样做,但我想强调你可能会通过使用非标准方法给自己带来痛苦 .
是的你可以 . 无法在“项目视图”中标记已标记文件夹的子文件夹 . 但您可以在项目结构中执行此操作(Ctrl Shift Alt S) . 转到
Modules
,选择您的模块并切换到Sources
选项卡 . 现在您可以将src
文件夹标记为Sources
(您已经这样做了)并将src/test
标记为Tests
等 .根据Web Help,在WebStorm中,此设置隐藏在
Settings > Directories
而不是项目结构中 .这是另一个仅使用项目视图的解决方案:取消标记源文件夹,标记测试/资源子文件夹,然后再次标记(父)源文件夹 . 我不确定,为什么它不起作用 .