gpt4 book ai didi

Webpack 相对 css url() 与 file-loader/css-loader

转载 作者:行者123 更新时间:2023-12-04 00:03:31 25 4
gpt4 key购买 nike

我对 webpack/npm 很陌生,我正试图弄清楚如何在其他项目依赖项中使用 css url。

文件夹结构

src
fonts/
scss/
app.scss
js/
app.js
img/
index.html

webpack.config.js
var path = require('path');
var extractPlugin = require('extract-text-webpack-plugin');
var cleanWebpackPlugin = require('clean-webpack-plugin');
var htmlWebpackPlugin = require('html-webpack-plugin');
var webpack = require("webpack");

module.exports = {
entry: './src/js/app.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'js/app.js'
},
devServer: {
stats: 'errors-only',
compress: true,
open: true,
port: 9000
},
module: {

rules: [

// ES6 -> ES5 transpiler

{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['es2015']
}
}
},

// SCSS to CSS -> Autoprefix -> Load CSS

{
test: /\.(scss|css)$/,
use: extractPlugin.extract({
use: [
'css-loader',
{
loader: 'postcss-loader',
options: {
plugins: (loader) => [require('autoprefixer')()]
}
},
'sass-loader'
]
})
},

// HTML Loader
{
test: /\.html$/,
use: ['html-loader']
},

// Image Loader
{
test: /\.(jpg|png|svg|gif)$/,
use: [
{
loader: 'file-loader',
options: {
outputPath: 'img/',
name: '[name].[ext]'
}
}
]
},
// Font Loader
{
test: /\.(eot|ttf|woff)$/,
use: [
{
loader: 'file-loader',
options: {
outputPath: 'fonts/',
name: '[name].[ext]'
}
}
]
}


]

},
plugins: [
new extractPlugin({filename: 'scss/app.css'}),
new cleanWebpackPlugin(['dist']),
new htmlWebpackPlugin({ template: 'src/index.html' }),
new webpack.ProvidePlugin({ $: 'jquery', jQuery: 'jquery', 'window.jQuery': 'jquery' })
]
};

我已经成功地将 lightGallery 包含在我的项目中,如下所示:

app.js
import 'lightgallery';

应用程序.scss
@import '~lightgallery/dist/css/lightgallery.css';

轻图库样式表引用了我已成功加载到 fonts/ 中的字体使用 webpack file-loader
我的问题是构建的 css 文件试图从 scss 文件夹而不是我的根目录中引用相对于字体。

即: http://localhost:9000/scss/img/loading.gif
我需要从 css 链接到的所有 Assets 才能从我的根目录中解析

http://localhost:9000/img/loading.gif
无论如何我可以配置我的 css-loader 以在所有 url 前面加上 / ?

帮助!

最佳答案

file-loader尊重 output.publicPath ,但是因为你没有设置它,所以生成的路径将是一个相对路径。您可以将公共(public)路径设置为/ .

output: {
path: path.resolve(__dirname, 'dist'),
filename: 'js/app.js',
publicPath: '/'
},

这也会影响处理任何 Assets 的其他加载器和插件。这通常是您想要的,因此建议您这样做,但如果您只想为特定文件更改它,您可以使用 publicPath file-loader 上的选项.
{
loader: 'file-loader',
options: {
outputPath: 'img/',
name: '[name].[ext]',
publicPath: '/'
}
}

关于Webpack 相对 css url() 与 file-loader/css-loader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44204353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com