简体   繁体   English

使用 webpack 未在 html 中加载图像

[英]images not loading in html using webpack

I'm having any issue loading images from a different folder than where my index.html file is located.我从与 index.html 文件所在的文件夹不同的文件夹加载图像时遇到任何问题。 Below is the message I am getting from the console.以下是我从控制台收到的消息。

GET http://localhost:3000/company-logo.jpg 404 (Not Found)

Here is my file directory这是我的文件目录

在此处输入图像描述

webpack.config.js webpack.config.js

const currentTask = process.env.npm_lifecycle_event
const path = require('path')
const {CleanWebpackPlugin} = require('clean-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const fse = require('fs-extra')

const postCSSPlugins = [
    require('postcss-import'),
    require('postcss-simple-vars'),
    require('postcss-nested'),
    require('autoprefixer')
]

class RunAfterComile {
    apply(compiler) {
        compiler.hooks.done.tap('Copy images', function() {
            fse.copySync('./public/images', './dist/public/images')
        })
    }
}

let cssConfig = {
    test: /\.css$/i,
    use: ['css-loader?url=false', {loader: 'postcss-loader', options: {plugins: postCSSPlugins}}]
}

let pages = fse.readdirSync('./views').filter(function(file) {
    return file.endsWith('.html')
}).map(function(page) {
    return new HtmlWebpackPlugin({
        filename: page,
        template: `./views/${page}`
    })
})

let config = {
    entry: './public/scripts/App.js',
    plugins: pages,
    module: {
        rules: [
            cssConfig
        ]
    }
}

if (currentTask == 'dev') {
    cssConfig.use.unshift('style-loader')
    config.output = {
        filename: 'bundled.js',
        path: path.resolve(__dirname, 'public')
    }
    config.devServer = {
        before: function(app, server) {
            server._watch('./views/**/*.html')
        },
        contentBase: path.join(__dirname, './views'),
        hot: true,
        port: 3000
    }
    config.mode = 'development'
}

if (currentTask == 'build') {
    config.module.rules.push({
        test: /\.js$/,
        exclude: /(node_modules)/,
        use: {
            loader: 'babel-loader',
            options: {
                presets: ['@babel/preset-env']
            }
        }
    })
    cssConfig.use.unshift(MiniCssExtractPlugin.loader)
    postCSSPlugins.push(require('cssnano'))
    config.output = {
        filename: '[name].[chunkhash].js',
        chunkFilename: '[name].[chunkhash].js',
        path: path.resolve(__dirname, 'dist')
    }
    config.mode = 'production'
    config.optimization = {
        splitChunks: {chunks: 'all'}
    }
    config.plugins.push(
        new CleanWebpackPlugin(), 
        new MiniCssExtractPlugin({filename: 'styles.[chunkhash].css'}),
        new RunAfterComile()
        )
}

module.exports = config

The css works perfectly fine. css 工作得非常好。 I seem to only be having problems with images.我似乎只对图像有问题。

I tried the following file paths but they didn't work.我尝试了以下文件路径,但它们不起作用。 I think I am missing something.我想我错过了一些东西。

index.html索引.html

  1. <img src="./company-logo.jpg" alt="dfgadfg">
  2. <img src="../public/images/company-logo.jpg" alt="dfgadfg">
  3. <img src="./images/company-logo.jpg" alt="dfgadfg">

any help would be appreciated.任何帮助,将不胜感激。 Thank you very much.非常感谢。

Try use尝试使用

module: {
      rules: [
       {
         test: /\.(png|svg|jpg|gif)$/,
         use: [
           'file-loader',
         ],
       },
      ],
    },

You might require file-loder to get the images correctly served您可能需要文件加载器才能正确提供图像

rules: [
  {
    test: /\.(png|jpe?g|gif)$/i,
    loader: 'file-loader',
    options: {
      outputPath: 'images' // Chage this like 'public/images' or any other relative path to the root
    }
  },
  ...
]

Try to inspect and check how the images are loading in Source tab of Developer Tools , change the outputPath accordingly.尝试在Developer ToolsSource选项卡中检查并检查图像是如何加载的,相应地更改outputPath

Update更新

If images are still not loading to Source tab of browser, try importing it in your App.js (Entry point file)如果图像仍未加载到浏览器的Source选项卡,请尝试将其导入App.js (入口点文件)

....
import "../public/images/company-logo.jpg";

...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM