要将图像添加到项目中,我正在使用以下内容:sass文件中的url()css属性,并指定src文件夹的相对路径,例如content: url('/images/right-arrow.svg');
。
问题在于,在生产版本中,我需要摆脱第一个斜杠,以便在捆绑的css文件中包含这样的路径('images/right-arrow.svg')
。
我能获得期望行为的唯一方法是对url: false
使用css-loader
选项,并在sass文件中写没有斜杠的路径:content: url('/images/right-arrow.svg')
,但是这样的选项不需要添加来自node_modules的文件,例如字体和图像。
Webpack配置 :
return {
entry: ['babel-polyfill', './src/app.js'],
output: {
path: path.join(__dirname, 'public/'),
filename: '[name].[hash].js',
},
mode: isProduction || 'development',
module: {
rules: [
{
loader: 'babel-loader',
test: /\.js$/,
exclude: /node_modules/
},
{
test: /\.s?css$/,
use: [
isProduction ? MiniCssExtractPlugin.loader : 'style-loader',
{
loader: 'css-loader',
options: {
url: true
}
},
'sass-loader'
]
},
{
test: /\.(svg|gif|png)$/,
use: {
loader: 'file-loader',
options: {
name: '[name].[ext]',
outputPath: 'images'
}
}
},
{
test: /\.(otf|woff2|ttf|eot|woff)$/,
use: {
loader: 'file-loader',
options: {
name: '[name].[ext]',
outputPath: 'fonts/'
}
}
}
]
}
我在webpack配置中缺少什么来实现正确工作的路径?
答案 0 :(得分:1)
好的,我已经解决了这个问题。 @Ujin建议使用resolve-url-loader之前,我没有使用任何结果。在他发表评论后,我澄清了resolve-url-loader的工作,并适当地将其配置为解决我的问题。主要问题是我错过阅读resolve-url-loader文档的重要段落,该段落说:
在resolve-url-loader之前的装载程序所需的源映射(与devtool无关)。
我也没有使用resolve-url-loader插件的 root 选项。因此, .scss 文件的webpack配置如下所示:
test: /\.s?css$/,
use: [
isProduction ? MiniCssExtractPlugin.loader : 'style-loader',
'css-loader',
{
loader: 'resolve-url-loader',
options: {
root: path.join(__dirname, 'src')
}
},
{
loader: 'sass-loader',
options: {
sourceMap: true,
sourceMapContents: false
}
}
]
}
答案 1 :(得分:0)
检查documentation有关url(...)
的问题。
建议使用resolve-url-loader。
您也可以尝试使用copy-webpack-plugin