Bog*_*n D 71 javascript webstorm webpack es6-module-loader
我使用webpack路径别名来加载ES6模块.
例如,如果我定义别名utils而不是类似的东西
import Foo from "../../../utils/foo",我可以这样做
import Foo from "utils/foo"
问题是,一旦我开始使用别名,WebStorm就会失去对导入的跟踪,并且我会留下警告并且没有自动完成.
有没有办法指示WebStorm使用这些别名?
Jal*_*lil 112
[弃用答案.从WS2017.2开始,Webstorm自动解析并应用Webpack配置(参见@anstarovoyt评论)]
就在这里.
实际上,Webstorm无法自动解析和应用Webpack配置,但您可以以相同的方式设置别名.
您只需将"utils" 的父文件夹(在您的示例中)标记为资源根(右键单击,将目录标记为/ resource root).
我们设法做了以下结构:
/src
/A
/B
/C
Run Code Online (Sandbox Code Playgroud)
我们在Webpack中将AB和C文件夹声明为别名.在Webstorm中,我们将"src"标记为"Resource Root".
现在我们可以简单地导入:
import A/path/to/any/file.js
Run Code Online (Sandbox Code Playgroud)
代替
import ../../../../../A/path/to/any/file.js
Run Code Online (Sandbox Code Playgroud)
同时仍然让Webstorm正确解析和索引所有代码,链接到文件,自动完成等等......
Tom*_*zyk 38
我设法在webpack中为WebStorm 2017.2设置别名,如下所示:
E. *_* Dn 31
您可以定义自定义路径,以便 WebStorm/PhpStorm 可以理解您的别名。但请确保它们与您的别名相同。在您的根目录中创建文件并像这样调用它:(webStorm.config.js任何js文件都可以)。然后在里面配置你的路径:
System.config({
"paths": {
"components/*": "./src/components/*",
"core/*": "./src/core/*",
...
}
});
Run Code Online (Sandbox Code Playgroud)
WebStorm/PhpStorm 将识别System为它自己的模块并将此文件视为配置。
小智 22
为了记录:在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')
}
},
...
}
Run Code Online (Sandbox Code Playgroud)
然后在webpack.mix.js中导入它,如:
const config = require('./webpack.config')
...
mix.webpackConfig(config)
Run Code Online (Sandbox Code Playgroud)
确保在PhpStorm的配置中正确指向webpack配置文件:设置>语言和框架> Javascript> Webpack
这是在评论中回答的,但为了避免人们只关注评论并仅链接信息,这里是:
从WS2017.2开始,这将自动完成。信息在这里。
据此,webstorm将自动解析webpack.config项目根目录中包含的别名。如果您具有自定义结构,但您webpack.config不在根目录中,请转到Settings | Languages & Frameworks | JavaScript | Webpack并将选项设置为所需的配置。
注意:大多数设置都有一个base配置,该配置然后调用dev或prod版本。为了使其正常工作,您需要告诉webstorm使用dev one。
小智 7
添加jsconfig.js到您的项目根目录
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"~/*": ["./src/*"]
}
}
}
Run Code Online (Sandbox Code Playgroud)
不是现在,我们还在反应项目中使用路径别名来处理文件.导入名称较短,但我们在webstorm的静态检查以及完成功能上丢失了很多.
我们后来决定将代码减少到只有3个深度级别,以及公共部分的单个级别.webstom的路径完成功能(ctrl + space)甚至有助于减少打字开销.生产版本不使用更长的名称,因此在最终代码中几乎没有任何区别.
我建议请重新考虑你对别名的决定.您放弃了来自node_modules和您自己的代码的模块的语义含义,以及反复引用别名文件以理解您的代码,这是一个更大的开销.