4

我对 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 包含在我的项目中,如下所示:

应用程序.js

import 'lightgallery';

应用程序.scss

@import '~lightgallery/dist/css/lightgallery.css';

灯光画廊样式表引用了我fonts/使用 webpack成功加载的字体file-loader

我的问题是构建的 css 文件试图从 scss 文件夹而不是我的根目录中引用相对于字体。

IE:http://localhost:9000/scss/img/loading.gif

我需要从 css 链接到的所有资产才能从我的根目录中解析

IEhttp://localhost:9000/img/loading.gif

无论如何我可以将我的 css-loader 配置为在所有 url 前面加上 a/吗?

帮助!

4

1 回答 1

9

file-loader方面output.publicPath,但因为你没有设置它,结果路径将是一个相对路径。您可以将公共路径设置为/.

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

这也会影响处理任何资产的其他加载器和插件。这通常是您想要的,因此建议您这样做,但如果您只想为特定文件更改它,您可以publicPath使用file-loader.

{
    loader: 'file-loader',
    options: {
        outputPath: 'img/',
        name: '[name].[ext]',
        publicPath: '/'
    }
}
于 2017-05-27T10:59:37.637 回答