我在app/components/
中定义了一些React组件。我在webpack中设置了一些别名,如下所示:
//webpack.conf.js
module.exports = {
entry: './app/app.jsx',
output: {
path: __dirname,
filename: './public/bundle.js'
},
resolve: {
root: __dirname,
alias: {
Main: 'app/components/Main.jsx',
Nav: 'app/components/Nav.jsx',
Weather: 'app/components/Weather.jsx',
About: 'app/components/About.jsx'
},
extensions: ['', '.js', '.jsx']
},
module: {
loaders: [
{
loader: 'babel-loader',
query: {
presets: ['react', 'es2015', 'stage-0']
},
test: /\.jsx?$/,
exclude: /(node_modules|bower_components)/
}
]
}
};
我的问题是:为什么所有别名都以'app'
而不是'./app'
开头?当我将别名更改为以'./'
开头时(因为我认为它们是等效的),webpack会抱怨Module not found: Error: Cannot resolve...
,所以看起来它们不等同。
为什么entry
和output.filename
,他们确实需要'./'
?是因为resolve.root: __dirname
吗? __dirname
的目的是什么(resolve and in
输出中都有)?
答案 0 :(得分:1)
__dirname
指向您的webpack.config.js
所在的当前目录。因此,当您使用path: __dirname
指定输出文件的位置时,输出文件的位置将相对于主webpack.config.js
所在的目录。
关于在{resolve}中使用./
:路径相对于包含require
调用的文件进行解析。因此,您应该在webpack.config.js中使用绝对路径,以避免在调用别名文件/模块时考虑相对路径。请参阅webpack文档here。
相对路径连接到上下文目录和结果 根据“解析绝对路径”来解析绝对文件。
因此,在使用别名时不需要使用./
。
您可以看到哪些别名将被解析为here的示例
我希望我能够解释它。