PhpStorm 无法识别使用 webpack 别名导入的 Sass 文件

Posted

技术标签:

【中文标题】PhpStorm 无法识别使用 webpack 别名导入的 Sass 文件【英文标题】:PhpStorm does not recognise Sass files imported with usage webpack aliases 【发布时间】:2019-01-07 16:09:31 【问题描述】:

我将 phpStorm 2018.2 用于 Angular 项目(使用 Webpack 4.16 构建)

我在 webpack 中设置了别名来导入 scss 文件,如下所示:

resolve: 
  alias: 
    'styles': `$helpers.root('src/styles/')`
  ,

在我的 scss 文件中,我可以这样导入:

@import '~styles/variables';

从 vue 的 webpack 角度来看,它运行良好。但是 PhpSotrm 给了我一个错误:

这是 PhpStorm 中缺少的功能吗 (I can see clearly here that this should be working for Webstorm)

This question 在 webstorm 上描述了这个问题,但我找不到 PhpStorm 的任何解释。

那么我做错了什么还是 PhpStorm 中的错误?

按照 Ru 的回答进行编辑:

1 如果我将 webpack.config.js 更改为

resolve: 
  alias: 
    '#styles': `$helpers.root('src/styles/')`
  ,

以及scss文件中的代码:

@import '#styles/_variables';

错误将从 phpStorm 中消失,但 webpack 引发错误:

@import '#styles/_variables';
^
      File to import not found or unreadable: #styles/_variables.

2) 如果我使用另一个符号(我尝试了 @$%&)或没有符号,webpack 会引发错误,而 phpStorm 会引发错误...

3) 如果我使用~,它不会使用 webpack 别名(我删除了 webpack 别名并且它可以工作),所以很明显有些东西我没有在这里得到。 当 webpack 中没有定义别名时,为什么 webpack 设法在 /src/styles 文件夹中找到我的 variables.scss....

【问题讨论】:

~ 为别名路径添加前缀是正确的方法,您的导入应该可以正常工作...部分文件(名称以下划线开头的文件)存在一个已知问题:如果下划线是导入中省略,并且正在使用别名,无法解析导入 (youtrack.jetbrains.com/issue/WEB-32760)。但是像 `@import '~styles/_variables' 这样的导入应该仍然有效。如果您在解决问题时遇到问题,请创建支持票 【参考方案1】:

~node_modules 文件夹的别名,因此在这种情况下,您使用了两个程序可能无法理解的别名。您应该尝试为别名的样式添加符号前缀。例如。 #styles 然后你可以使用@import '#styles/variables';

resolve: 
  alias: 
    '#styles': `$helpers.root('src/styles/')`
  ,

以上代码仅作为示例。

【讨论】:

需要在导入路径前加上~,见webpack.js.org/loaders/sass-loader/#imports,***.com/questions/34717203/…;像@import '~alias/file_name'; 这样的导入应该由IDE解决 @Tonio 我可以与您核实一下您是否将path 作为软件包安装在devDependencies 中?如果是这样,我会继续修改我的答案以进行适当的修复:) 我没有安装名为 path 的包,但是,如果我执行“const path = require('path');”在 webpack.config.js 中,我将获得“node”包中定义的路径实例(我认为)

以上是关于PhpStorm 无法识别使用 webpack 别名导入的 Sass 文件的主要内容,如果未能解决你的问题,请参考以下文章

PHPStorm 无法识别 Laravel 5.0 中我的 Model 类的方法 [重复]

PHPStorm 无法解析绝对包含路径

(win系统)phpstorm里边terminal无法识别php及composergit命令等

Webpack 无法识别节点模块中的 jsx 代码

webpack 无法识别命令行选项

Vue.config.js 无法识别 require('webpack')