WebStorm中导入的路径别名


80

我将webpack路径别名用于ES6模块加载。

例如,如果我为utils而不是定义别名,则
import Foo from "../../../utils/foo"可以
import Foo from "utils/foo"

问题是,一旦我开始使用别名,WebStorm就会失去对导入的跟踪,并且会留下警告并且没有自动完成功能。

有没有一种方法可以指示WebStorm使用此类别名?

Answers:


125

[已弃用的答案。从WS2017.2开始,Webstorm会自动解析并应用Webpack配置(请参阅@anstarovoyt注释)]

就在这里。

实际上,Webstorm不能自动解析和应用Webpack配置,但是您可以用相同的方式设置别名。

您只需将“ utils”的文件夹(在您的示例中)标记为资源根(右键单击,将目录标记为/资源根)。

右键点击文件夹

我们只是设法做到以下结构:

/src
    /A
    /B
    /C

在Webpack中,我们有AB和C文件夹声明为别名。在Webstorm中,我们将“ src”标记为“ Resource Root”。

现在我们可以简单地导入:

import A/path/to/any/file.js

代替

import ../../../../../A/path/to/any/file.js

同时仍然让Webstorm正确地解析和索引所有代码,链接到文件,自动完成等等。


1
当不直接从Webstorm构建时,这将有效地打破问题
maddrag0n

2
我曾在WebStorm 2016.2.3中尝试过,但是此解决方案不起作用。
Zation 2016年

2
以及如何导入angular2 import { Component } from '@angular/core',那也可以解决。如何实现,at以更清楚地表明路径是别名?
Hitmands


3
多个文件夹和多个Webpack配置如何?可能由于以下原因对我不起作用:“默认情况下,WebStorm将在项目根目录中分析webpack配置文件,但您可以在“首选项” |“语言和框架| JavaScript | Webpack”中选择另一个文件” blog.jetbrains.com / webstorm / 2017/06 /…
rofrol

53

我设法在webpack中为WebStorm 2017.2设置了别名,如下所示:

在此处输入图片说明


2
有用。该文件应包含module.exports = {resolve:{alias:{'@utils':path.resolve(__ dirname,'../utils/')}}}。另外,我还必须重新启动WebStorm才能应用更改。
亚历山大

1
谢谢!它帮助我在PhpStorm 2019.1
ИльяЗеленько

我们应该将此答案标记为最佳答案。谢谢。
Moein Alizadeh,

这对我有帮助
TomTomSamSam

谢谢!最后,为这个烦人的问题提供一些解决方案。
阿尔贝托·佩雷斯

33

作为记录:在PHPSTORM中,使用laravel mix,我设法通过分别创建webpack.config.js文件来解决此问题,例如:

const path = require('path')
const webpack = require('webpack')

module.exports = {
  ...
  resolve: {
    extensions: ['.js', '.json', '.vue'],
    alias: {
      '~': path.resolve(__dirname, './resources/assets/js')
    }
  },
  ...
}

然后将其导入到webpack.mix.js中,如下所示:

const config = require('./webpack.config')
...
mix.webpackConfig(config)

确保在以下位置的PhpStorm配置中正确指向了webpack配置文件:设置>语言和框架> Javascript> Webpack


请考虑在他们的项目中实际上并未使用webpack的用户的情况,并希望仅设置这两个文件来教PHPStorm如何解析别名。那些人将不知道在“ ...”中应该包含什么内容,才能使webpack.mix.js文件实际用于此目的。具体来说,如果我简单地删除“ ...”,则该mix符号将报告为IDE尚未解析该符号,这强烈暗示了该符号实际上将无法工作。缺少但非常重要的行,其中以某种方式要求/导入了“ mix”符号。请添加这些到您的答案。
SzczepanHołyszewski

12

您可以定义自定义路径,因此WebStorm / PhpStorm可以理解您的别名。但是请确保它们与您的别名相同。在您的根目录中创建文件,然后将其命名为:(webStorm.config.js任何js文件都可以)。然后在内部配置路径:

System.config({
  "paths": {
    "components/*": "./src/components/*",
    "core/*": "./src/core/*",
    ...
  }
});

WebStorm / PhpStorm将识别System为自己的模块,并将此文件视为配置。


这实际上有效!在Rollup + Svelte上的项目真的对我有帮助!
joycollector

谢谢。有用。问:您知道此文件可用的全部选项的任何文档吗?
Mojtaba Hn

8

这是在评论中回答的,但是为了避免人们只关注评论并仅链接信息,这里是:

从WS2017.2开始,这将自动完成。信息在这里

据此,webstorm将自动解析webpack.config项目根目录中包含的别名。如果您具有自定义结构,但您webpack.config不在根目录中,请转到Settings | Languages & Frameworks | JavaScript | Webpack并将选项设置为所需的配置。

注意:大多数设置都有一个base配置,该配置然后调用devprod版本。为了使其正常工作,您需要告诉webstorm使用dev one


2
除非使用Webpack别名,否则这似乎可行。我使用的@是我src文件夹的别名,但是即使将Webstorm指向我的配置后,它仍然无法正确解析我的导入。但是,一旦我将该src文件夹标记为Resource Root,它就会按预期工作。如果Webstorm可以处理别名,那没什么大不了的。
dericcain

您是否为别名使用符号,例如:'@': '../src')。另外,您是将一个文件用于Webpack配置还是多个文件?想知道有什么不同。谢谢!
dericcain

3
我的一个例子是'@': path.resolve(__dirname, '../src/components')。我使用多个文件,webpack.base.conf.js然后devprod版本。他们依次调用一个config文件夹index.jsdev.env.jsprod.env.js。我指向我的网络风暴看webpack.dev.conf.js文件。
webnoob

2
我的设置非常相似(vue-webpack-pwa),并指出.dev.conf了窍门。指向.base.conf无效。好决定!
dericcain

我认为这可能需要解决一个问题。我可以确认它可以正常工作,但有时我会打开它,并且所有webpack别名都无法解析。我做了一个“使缓存无效并重新启动”,它的工作如广告所示
willredington315 '18

7

现在不行,我们还在react项目中为文件使用路径别名。导入名称较短,但是在静态检查Webstorm以及完成功能方面我们损失了很多。

后来,我们决定将代码的深度减少到3个级别,并将通用部分减少到一个级别。webstom的路径完成功能(ctrl + space)甚至可以帮助减少键入开销。生产版本不使用更长的名称,因此最终代码几乎没有任何区别。

我建议您重新考虑您对别名的决定。您将失去来自node_modules和您自己的代码的模块的语义含义,以及一次又一次地引用别名文件以理解您的代码,这是一个更大的开销。


1
这是更好的答案。相对路径很烦人,但是路径别名的便利性不值得失去有用的IDE功能。
thewoolleyman

3

在PHPStorm(当前使用2017.2)中,我无法使Webpack配置在别名方面正常工作。

我的解决方法涉及使用主要设置的“目录”部分。我只需要将别名引用的每个文件夹标记为源根,然后单击每个属性的下拉列表并将别名指定为“包前缀”。这使一切都对我有用。

不确定WebStorm中是否存在目录部分,但是如果存在,这似乎是使导入别名正常工作的可靠方法。


2

对于任何苦苦挣扎的人:path.resolve()必须使用Idea(Websorm)的第一个参数“ __dirname”调用,才能正确解析路径。

适用于Idea(Websorm):

alias: {
    '@someAlias': pathLib.resolve(__dirname, 'path/to/directory')
}

不适用于Idea(Websorm)(虽然仍然是有效的Webpack别名):

alias: {
    '@someAlias': pathLib.resolve('path/to/directory')
}

1
如何使Webstorm@someAlias正确识别?
戴夫·约翰森

您在哪里定义了别名文件?在哪个文件中?
丹尼尔(Daniel)

2

如果module.exports返回函数,则Webstorm无法读取webpack.config 。例如

module.exports = function (webpackEnv) {
  return {
    mode: isEnvProduction ? 'production' : isEnvDevelopment && 'development',
    ...
 }
}

检查您的配置文件,可能这是您的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.