【问题标题】:loading css url() files in a specific folder with webpack使用 webpack 在特定文件夹中加载 css url() 文件
【发布时间】:2018-05-15 09:22:32
【问题描述】:

我正在使用一个内部有一个 css 文件的节点库,该 css 文件会加载这样的图像

background-image: url("image.png");

http://localhost:9000/(根目录)请求的文件“image.png”很脏,无法在项目的根目录中放置图像。

我还有另一个问题,我不知道为什么模块的图像文件没有被自动复制到构建文件夹,只有当我手动将图像文件复制到构建文件夹时才有效。 使用 Webpack 配置参数,我得到了将图像复制到根目录的功能,但它给它们添加了随机名称,我不希望它们在根目录中。

我希望将所有加载的图像复制到 build 文件夹内的“img”子文件夹中,并使用它们的原始文件名,并在那里请求,这样根目录就不会被那里的所有文件弄脏。

这是我的 webpack 配置文件:

var webpack               = require('webpack');
var WebpackNotifierPlugin = require('webpack-notifier');

"use strict";
module.exports = {
    entry:   "./source/typescript/Main.ts",
    output: {
        filename: "./js/bundle.js"
    },
    devtool: "inline-source-map",
    devServer: {
        contentBase: ".",
        host: "localhost",
        port: 9000,
        open: true
    },
    module: {
        rules: [
            {
                test:/\.(s*)css$/,
                use: [
                    {
                        loader: "style-loader"
                    },
                    {
                        loader: "css-loader",
                        options: {
                            url: false
                        }
                    },
                    {
                        loader: "sass-loader"
                    }
                ]
            },
            {
                test: /\.tsx?$/,
                use: 'ts-loader',
                exclude: /node_modules/
            },
            {
                enforce: 'pre',
                test: /\.js$/,
                loader: "source-map-loader"
            },
            {
                test: /\.(png|jpg|gif|svg|eot|ttf|otf|woff|woff2|json|xml|ico)$/,
                use: [{loader: 'file-loader'}]
            },
            {
                test: /\.(csv|tsv)$/,
                use: [{ loader: 'csv-loader' }]
            },
            {
                test: /\.exec\.js$/,
                use: [{ loader: 'script-loader' }]
            },
            {
                test: require.resolve('jquery'),
                use:
                [
                    {
                        loader: 'expose-loader',
                        options: 'jQuery'
                    },
                    {
                        loader: 'expose-loader',
                        options: '$'
                    }
                ]
            }

        ]
    },
    resolve: {
        extensions: [ '.tsx', '.ts', '.js' ]
    },
    plugins: [
        new WebpackNotifierPlugin({excludeWarnings: true}),
        //new webpack.optimize.UglifyJsPlugin({compress: {warnings: false}}) // Uncoment to minify bundle
    ]
};

【问题讨论】:

  • 在你的 webpack 配置中,你使用url-loader吗?
  • 不,我不使用 url-loader。
  • 我的意思是url-loader抱歉
  • 对不起我的错误,我编辑了评论不,我不使用 url-loader
  • url-loader 类似于file-loader 但如果文件足够小,它可以对其进行编码和内联。所以你不再有路径问题了。对于路径,问题,您可以尝试在您的ouput 中添加一个path 键:webpack.js.org/configuration/output/#output-path

标签: webpack webpack-2 webpack-4 webpack-style-loader


【解决方案1】:

我解决了问题:

"outputPath" 和 "name" 参数可以用来告诉 webpack 将所有图像文件复制到构建文件夹中的特定文件夹中,并具有特定的命名规则。所以我解决了这样的问题:

1)文件名随机复制到根目录的解决办法:我修改了webpack配置文件告诉webpack加载的任何图片都应该复制到img sub里面的build文件夹- 带有原始名称的文件夹。这是在文件加载器选项中使用“outputPath”和“name”参数完成的。

2) 图像文件没有复制到构建文件夹的解决方案:删除了css-loader中的“url:false”,现在路径由css-loader管理。 (默认行为)。我最初设置该选项是因为我不了解 css-loader 如何解析 url,所以我禁用了该功能,因为它会引发一些错误。现在我意识到css url() 路径是相对于以/开头的项目的根目录,例如: url("/img/my-image.png");这阻止了 webpack 将图像文件复制到构建文件夹。

现在一切正常,我最终的加载器 webpack 配置是这样的:

    module: {
        rules: [
            {
                test: /\.(png|jpg|gif|svg|ico)$/,
                loader: 'file-loader',
                query:{
                    outputPath: './img/',
                    name: '[name].[ext]?[hash]'
                }
            },
            {
                test: /\.(eot|ttf|otf|woff|woff2|json|xml)$/,
                loader: 'file-loader',
                query:{
                    outputPath: './fonts/',
                    name: '[name].[ext]?[hash]'
                }
            },
            {
                test: /\.(json|xml)$/,
                loader: 'file-loader',
                query:{
                    outputPath: './data/',
                    name: '[name].[ext]?[hash]'
                }
            },
            {
                test: /\.(s*)css$/,
                use: [{ loader: "style-loader" }, { loader: "css-loader" }, { loader: "sass-loader" }]
            },
            {
                test: /\.tsx?$/,
                use: 'ts-loader',
                exclude: /node_modules/
            },
            {
                enforce: 'pre',
                test: /\.js$/,
                loader: "source-map-loader"
            },
            {
                test: /\.(csv|tsv)$/,
                use: [{ loader: 'csv-loader' }]
            },
            {
                test: /\.exec\.js$/,
                use: [{ loader: 'script-loader' }]
            }           
        ]
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2023-03-14
    相关资源
    最近更新 更多