Jas*_*son 6 webpack sass-loader css-loader
Webpack + file-loader + sass-loader无法解析CSS背景图像的相对路径.
已编译的SCSS文件包含/dist/相对于SCSS/CSS文档而不是相对于SCSS/CSS文档的背景图像的路径.我研究过这个问题; sass-loader建议使用resolve-url-loader(带源映射).但是,添加resolve-url-loader对编译的CSS没有任何区别.
我已经能够通过在文件加载器上将'publicPath'设置为'../ ..'来解决此问题.或者通过禁用css-loader上的"url"设置.两者都不是一个好的解决方案,并且会导致复制文件和通过HTML或其他来源引用图像时出现问题.
Webpack和CSS的在线示例将CSS和图像放在同一个文件夹中(通常在根目录中).这不是我的webpack实现的最佳选择.在子文件夹中构造文件的概念似乎是一个相当基本的要求.这只是错误的做法吗?
运行Webpack ^ 3.5.1.Sass-loader ^ 6.0.6.文件加载器^ 0.11.2.Css-loader ^ 0.28.4.
文件结构
example/
??? dist/
? ??? assets
? ? ??? media
? ? ? ??? logo.png
? ? ??? styles
? ? ??? app.css
? ? ??? app.css.map
? ??? index.html
? ??? app.bundle.js
??? src/
??? assets
? ??? media
? ? ??? logo.png
? ??? styles
? ??? app.scss
??? app.js
Run Code Online (Sandbox Code Playgroud)
app.scss
body {
background: url(../media/logo.png);
}
Run Code Online (Sandbox Code Playgroud)
app.css
body {
background: url(assets/media/logo.png); //This should be ../media/logo.png
}
Run Code Online (Sandbox Code Playgroud)
app.js
require('./assets/styles/app.scss');
Run Code Online (Sandbox Code Playgroud)
webpack.config.js
const path = require('path');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
module.exports = {
entry: './src/app.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'app.bundle.js'
},
devtool: 'source-map',
module: {
loaders: [
{
test: /\.scss$/,
use: ExtractTextPlugin.extract({
use: [
{
loader: 'css-loader',
options: {
sourceMap: true
}
}, {
loader: 'resolve-url-loader'
}, {
loader: 'sass-loader',
options: {
sourceMap: true
}
}
]
})
}, {
test: /\.png$/,
use: [
{
loader: 'file-loader',
options: {
name: 'assets/media/[name].[ext]'
}
}
]
}
]
},
plugins: [
new ExtractTextPlugin({
filename: 'assets/styles/app.css'
})
]
}
Run Code Online (Sandbox Code Playgroud)
ExtractTextPlugin有一个publicPath可以解决此问题的选项。
{
test: /\.scss$/,
include: [
path.resolve(__dirname, "src/assets/styles")
],
use: ExtractTextPlugin.extract({
publicPath: '../../',
use: [
{
loader: 'css-loader',
options: {
sourceMap: true
}
}, {
loader: 'sass-loader',
options: {
sourceMap: true
}
}
]
})
}
Run Code Online (Sandbox Code Playgroud)
include向特定目录中的目标文件添加了数组。对于所有样式表都位于同一文件夹中的情况,建议使用此选项。
| 归档时间: |
|
| 查看次数: |
10326 次 |
| 最近记录: |