我使用webpack路径别名来加载ES6模块。
例如如果我为utils
定义别名而不是像
import Foo from "../../../utils/foo"
,我可以做
import Foo from "utils/foo"
问题在于,一旦我开始使用别名,WebStorm就会失去对导入的跟踪,而且我会留下警告并且没有自动完成。
有没有办法指示WebStorm使用这些别名?
答案 0 :(得分:98)
[已弃用的答案。从WS2017.2开始,Webstorm自动解析并应用Webpack配置(参见@anstarovoyt评论)]
是的,有。
实际上,Webstorm无法自动解析和应用Webpack配置,但您可以以相同的方式设置别名。
您只需将“utils”的父文件夹(在您的示例中)标记为资源根(右键单击,将目录标记为/ resource root) 。
我们刚刚设法使用以下结构:
/src
/A
/B
/C
我们在Webpack中将A和C文件夹声明为别名。 在Webstorm中,我们将“src”标记为“Resource Root”。
现在我们可以简单地导入:
import A/path/to/any/file.js
而不是
import ../../../../../A/path/to/any/file.js
同时仍然让Webstorm正确解析和索引所有代码,链接到文件,自动完成等等......
答案 1 :(得分:27)
答案 2 :(得分:16)
对于记录:在 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
答案 3 :(得分:5)
现在不是,我们还在反应项目中为文件使用路径别名。导入名称较短,但我们在静态检查webstorm以及完成功能方面损失惨重。
我们后来决定将代码减少到只有3个级别的深度,以及公共部分的单个级别。 webstom (ctrl + space)
的路径完成功能甚至可以帮助减少打字开销。生产版本不使用更长的名称,因此在最终代码中几乎没有任何区别。
我建议请重新考虑你对别名的决定。您放弃了来自node_modules和您自己的代码的模块的语义含义,以及反复引用别名文件以理解您的代码,这是一个更大的开销。
答案 4 :(得分:4)
这在评论中得到了解答,但是为了节省人们挖掘评论并仅链接信息,这里是:
从WS2017.2开始,这将自动完成。信息为here。
根据这一点,webstorm将自动解决项目根目录中webpack.config
中包含的别名。如果您有自定义结构且webpack.config
不在根文件夹中,请转到Settings | Languages & Frameworks | JavaScript | Webpack
并将选项设置为您需要的配置。
注意:大多数设置都有一个base
配置,然后调用dev
或prod
版本。为了使其正常工作,您需要告诉webstorm使用开发者。
答案 5 :(得分:2)
在PHPStorm中(目前使用2017.2),我无法让webpack配置在别名方面正常工作。
我的修复涉及使用"目录"部分主要设置。我只需要将别名引用的每个文件夹标记为source root,然后单击每个文件夹的属性下拉列表并将别名指定为"包前缀"。这使得一切都与我联系起来。
不确定WebStorm中是否存在“目录”部分,但如果确实如此,这似乎是一种使导入别名有效的万无一失的方法。
答案 6 :(得分:2)
对于任何挣扎的人:必须使用" __ dirname"来调用path.resolve(); Idea(Websorm)的第一个参数是能够正确解析路径。
适用于Idea(Websorm):
alias: {
'@someAlias': pathLib.resolve(__dirname, 'path/to/directory')
}
对于Idea(Websorm)不起作用(虽然仍然是有效的webpack别名):
alias: {
'@someAlias': pathLib.resolve('path/to/directory')
}
答案 7 :(得分:1)
在项目根目录上添加jsconfig.js
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"~/*": ["./src/*"]
}
}
}
答案 8 :(得分:0)
如果module.exports
返回函数,则Webstorm无法读取webpack.config。
例如
module.exports = function (webpackEnv) {
return {
mode: isEnvProduction ? 'production' : isEnvDevelopment && 'development',
...
}
}
检查您的配置文件,也许这可能是您的问题。
答案 9 :(得分:0)
您可以定义自定义路径,因此WebStorm / PhpStorm可以理解您的别名。但是请确保它们与您的别名相同。在您的根目录中创建文件,并命名为:webStorm.config.js
(任何js
文件都可以)。然后在其中配置路径:
System.config({
"paths": {
"components/*": "./src/components/*",
"core/*": "./src/core/*",
...
}
});
WebStorm / PhpStorm将System
识别为自己的模块,并将此文件作为配置。