我将webpack路径别名用于ES6模块加载。
例如,如果我为utils
而不是定义别名,则
import Foo from "../../../utils/foo"
可以
import Foo from "utils/foo"
问题是,一旦我开始使用别名,WebStorm就会失去对导入的跟踪,并且会留下警告并且没有自动完成功能。
有没有一种方法可以指示WebStorm使用此类别名?
Answers:
[已弃用的答案。从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正确地解析和索引所有代码,链接到文件,自动完成等等。
import { Component } from '@angular/core'
,那也可以解决。如何实现,at
以更清楚地表明路径是别名?
作为记录:在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
mix
符号将报告为IDE尚未解析该符号,这强烈暗示了该符号实际上将无法工作。缺少但非常重要的行,其中以某种方式要求/导入了“ mix”符号。请添加这些到您的答案。
您可以定义自定义路径,因此WebStorm / PhpStorm可以理解您的别名。但是请确保它们与您的别名相同。在您的根目录中创建文件,然后将其命名为:(webStorm.config.js
任何js
文件都可以)。然后在内部配置路径:
System.config({
"paths": {
"components/*": "./src/components/*",
"core/*": "./src/core/*",
...
}
});
WebStorm / PhpStorm将识别System
为自己的模块,并将此文件视为配置。
这是在评论中回答的,但是为了避免人们只关注评论并仅链接信息,这里是:
从WS2017.2开始,这将自动完成。信息在这里。
据此,webstorm将自动解析webpack.config
项目根目录中包含的别名。如果您具有自定义结构,但您webpack.config
不在根目录中,请转到Settings | Languages & Frameworks | JavaScript | Webpack
并将选项设置为所需的配置。
注意:大多数设置都有一个base
配置,该配置然后调用dev
或prod
版本。为了使其正常工作,您需要告诉webstorm使用dev one。
@
是我src
文件夹的别名,但是即使将Webstorm指向我的配置后,它仍然无法正确解析我的导入。但是,一旦我将该src
文件夹标记为Resource Root,它就会按预期工作。如果Webstorm可以处理别名,那没什么大不了的。
'@': '../src')
。另外,您是将一个文件用于Webpack配置还是多个文件?想知道有什么不同。谢谢!
'@': path.resolve(__dirname, '../src/components')
。我使用多个文件,webpack.base.conf.js
然后dev
和prod
版本。他们依次调用一个config文件夹index.js
,dev.env.js
和prod.env.js
。我指向我的网络风暴看webpack.dev.conf.js
文件。
.dev.conf
了窍门。指向.base.conf
无效。好决定!
现在不行,我们还在react项目中为文件使用路径别名。导入名称较短,但是在静态检查Webstorm以及完成功能方面我们损失了很多。
后来,我们决定将代码的深度减少到3个级别,并将通用部分减少到一个级别。webstom的路径完成功能(ctrl + space)
甚至可以帮助减少键入开销。生产版本不使用更长的名称,因此最终代码几乎没有任何区别。
我建议您重新考虑您对别名的决定。您将失去来自node_modules和您自己的代码的模块的语义含义,以及一次又一次地引用别名文件以理解您的代码,这是一个更大的开销。
对于任何苦苦挣扎的人: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')
}
@someAlias
正确识别?