我正在尝试移动.scss
个文件之一中使用的素材资源(图像和字体),但似乎它们被忽略了:
这是我的 .scss 文件:
@font-face {
font-family: 'myfont';
src: url('../../assets/fonts/myfont.ttf') format('truetype');
font-weight: 600;
font-style: normal;
}
body {
color: red;
font-family: 'myfont';
background: url('../../assets/images/bg.jpg');
}
这是我的 webpack.config.js :
const path = require('path');
const { CheckerPlugin } = require('awesome-typescript-loader');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
target: 'node',
entry: path.resolve(__dirname, 'server.tsx'),
output: {
filename: 'server_bundle.js',
path: path.resolve(__dirname, 'build'),
publicPath: '/build'
},
resolve: {
extensions: ['.ts', '.tsx', '.js', '.jsx']
},
module: {
rules: [{
test: /\.(tsx|ts)?$/,
loader: 'awesome-typescript-loader',
options: {
jsx: 'react'
}
},
{
test: /\.(scss|sass|css)$/,
use: [
MiniCssExtractPlugin.loader,
{ loader: 'css-loader', options: { url: false, sourceMap: true } },
{ loader: 'sass-loader', options: { sourceMap: true } },
]
},
{
test: /\.(png|svg|jpg|jpeg|gif)$/,
loader: 'file-loader',
options: { outputPath: 'public/images' }
},
{
test: /\.(woff|woff2|eot|ttf|otf)$/,
loader: 'file-loader',
options: { outputPath: 'public/fonts' }
}
]
},
plugins: [
new CheckerPlugin(),
new MiniCssExtractPlugin({
filename: 'public/styles_bundle.css',
chunkFilename: "public/styles/[id].css"
})
]
}
我在浏览器中得到此 .css 文件作为输出(注意图像名称):
body {
color: red;
background: url("../../assets/images/myimage.jpg");
}
在我的public
目录中,我得到了:
public/
styles_bundle.css
这里有两个问题:
我一直在尝试一切,但是我不知道这里可能会发生什么...任何想法?
答案 0 :(得分:1)
我刚刚解决了一个类似的问题。如果将url选项更改为true,则可能会看到失败的图像URL引用。
{ loader: 'css-loader', options: { url: false, sourceMap: true } },
或者您可以手动检查路径引用是否正确。
url('../../assets/images/bg.jpg')
我认为由于所有图像资源链接都不正确,所以无法创建图像文件夹。
对于我要解决的问题,引用均不正确,我无法对其进行修复,因此我只是使用此webpack copy plugin将文件复制到正确的dist文件夹位置。
答案 1 :(得分:0)
您需要url-loader
{
test: /\.(jpg|png|gif|woff|eot|ttf|svg)/,
use: {
loader: 'url-loader', // this need file-loader
options: {
limit: 50000
}
}
}
答案 2 :(得分:0)
答案 3 :(得分:0)
我也遇到了这个问题。我使用的是以下版本:
package.json
"mini-css-extract-plugin": "^0.10.1",
"webpack": "^5.3.1",
对我来说,一切都编译得很好,直到我将以下内容添加到scss文件中:
.xmas {
background-image: url("./img/Xmas2020/SurveyBanner.png");
height: 150px;
}
问题是背景图像的网址。当我将其更改为绝对路径时,它会起作用:
.xmas {
background-image: url("/img/Xmas2020/SurveyBanner.png");
height: 150px;
}
webpack.config.js
这只是显示我如何将图像放入输出目录。我猜有多种方法可以做到这一点,但是我使用的是CopyWebpackPlugin。
plugins: [
new CopyWebpackPlugin({
patterns: [
{ from: './src/static/img', to: './img', force: true },
]
}),
]
此链接帮助我https://github.com/webpack-contrib/mini-css-extract-plugin/issues/286#issuecomment-455917803
答案 4 :(得分:0)
mini-css-extract-plugin
有一个“publicPath”选项(参见 here)。它基本上告诉生成的 css 在哪里可以找到字体、图像等外部资源。在我的情况下,将其设置为 '../' 并将所有文件加载器配置到其正确的目录,这非常有效。
基本上看起来像:
rules: [
{
test: /\.css$/,
use: [
{
loader: MiniCssExtractPlugin.loader,
options: {
publicPath: '/public/path/to/', // <-- This is what was helping.
},
},
'css-loader',
],
},
],