我有以下项目结构:
>根
> src
>脚本
> main.js
> foo.js
在main.js文件中,我像这样导入foo.js:
import 'src/scripts/foo.js'
当我点击上面的import语句并转到导航->声明我收到一条超级有用的消息,提示找不到要去的声明.
这使工作变得非常沮丧,因为编辑器基本上不知道哪个文件会导入其他文件.这意味着我无法使用IDE的有用功能,例如在移动文件时查找参考,查找用法等.
如果我将import语句更改为相对的,它将完全起作用:
import './foo.js'
但是,我们正在努力争取绝对进口,即a habit we picked up from writing python apps.
我遇到了Webstorm: “Cannot Resolve Directory”,这使我有了将src目录标记为Sources Root的想法.完成之后,我可以将main.js中的import语句更改为
import '/scripts/foo.js' //notice the leading forward slash
好吧,这会好一点,因为现在我至少可以导航->声明,但是它不是理想的,因为现在我无法将src下的任何目录标记为测试,资源等.
那么,为什么IntelliJ / webstorm很难做到这一点?
解决方法:
我非常建议不要在JavaScript代码中使用这种导入样式.相对路径虽然可能可行,但它是所有NodeJS代码中的事实上的标准,并且实际上已经扩展到使用模块系统的所有JS代码中.
在当前系统中,任何路径都以开头.是相对的,任何以/开头的路径都是绝对路径,其他任何路径都解析为模块.按照这种逻辑,相对于称为src的依赖项模块,导入“ src / scripts / foo.js”将被解析为./scripts/foo.js.
另请注意,文件扩展名是可选的,通常不使用.
如果您想使用这种样式,并且模块加载器支持它,那么您当然可以这样做,但是我想强调的是,使用非标准方法可能会给您带来痛苦.