webpack4下url-loader打包圖片問題


 

webpack.condig.js:

const path = require('path');

//導入插件
const VueLoaderPlugin = require('vue-loader/lib/plugin');//加這句是為了避免報錯:Module Error (from ./node_modules/vue-loader/lib/index.js):

const MiniCssExtractPlugin = require('mini-css-extract-plugin'); 

module.exports={
   entry:{
       main:'./main'
   },
   output:{
       path:path.join(__dirname,'./dist'),
       publicPath:'/dist/',
       filename:'main.js'
   },
   
   module:{
       rules:[
           {
               test:/\.vue$/,
               loader:'vue-loader',
               options:{
                   loaders:{
                       css:MiniCssExtractPlugin.loader
                   }
               }
           },
           {
               test:/\.js$/,
               loader:'babel-loader',
               exclude:/node_modules/
           },
           {
                test: /\.css$/, 
                use: [MiniCssExtractPlugin.loader, 'css-loader'],
           },
        //    {
        //         test: /\.(htm|html)$/i,
        //         use:[ 'html-withimg-loader'] 
        //     },
           { 
               test: /\.(png|jpg|gif|bmp|jpeg|svg)$/,
               use: [
                    {
                        loader: 'url-loader',
                        options:{
                            limit:1024,//限制打包圖片的大小: 
                        }
                    },
                ],  
           },  
          
        ]
    },
    plugins:[
        new VueLoaderPlugin(),
        new MiniCssExtractPlugin({ 
            filename: '[name].css', 
        }),  
    ]

}
View Code

 

webpack.config.prod.js:

 
//導入插件
const VueLoaderPlugin = require('vue-loader/lib/plugin');//加這句是為了避免報錯:Module Error (from ./node_modules/vue-loader/lib/index.js):
  
const webpack= require('webpack');

const HtmlWebpackPlugin = require('html-webpack-plugin')

const MiniCssExtractPlugin = require('mini-css-extract-plugin');

const UglifyJsPlugin = require('uglifyjs-webpack-plugin');//用來對js文件進行壓縮,從而減小js文件的大小,加速load速度

const merge=require('webpack-merge');

const webpackBaseConfig=require('./webpack.config.js');
 
//清空基本配置的插件列表
webpackBaseConfig.plugins=[];

module.exports=merge(webpackBaseConfig,{
    output:{
        publicPath:'./dist/',// /dist/前面要加一個.,這樣才能找到css、js和圖片的位置
        //'[name].[hash].js' 將入口文件重命名為帶有20位hash值的唯一文件
        filename: '[name].js'
    },
    plugins:[
        new VueLoaderPlugin(),
        new MiniCssExtractPlugin({
            filename: '[name].css',
            chunkFilename: '[id].css',
        }),
        new webpack.DefinePlugin({
            'process.env':{
                NODE_ENV:'"production"'
            }
        }), 
        //提取模板,並保存入口html文件
        new HtmlWebpackPlugin({
            title: 'Custom template',
            filename:'../index_prod.html', 
            // template: 'html-withimg-loader!'+'./index.ejs',
            // Load a custom template (lodash by default see the FAQ for details)
            template: './index.ejs',
            inject:true
        })
        
    ],
    optimization: {
        minimizer: [new UglifyJsPlugin()],
    },
     
} 
)
View Code

 

index.ejs:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
    <title><%= htmlWebpackPlugin.options.title %></title>
    
  </head>
  <body>
      <div id="app">
            
      </div>
      <img src="./images/cmmn.jpg" style="width: 200px"/> style="width: 200px"/>
  </body>
</html>

 

在html-webpack-plugin配置中的模板文件(如html或者ejs文件)中直接通過img標簽的src屬性引入圖片路徑,結果圖片是不會被打包的,但是編譯也不報錯。

(奇怪的是在.vue文件中使用src直接引用路徑就沒問題)

網上有人提出可以安裝html-withimg-loader插件,並配置對應的信息,就可以打包成功了。這么做確實會使得圖片打包成功,但是會有一個問題,即webpack.config.prod.js文件中的HtmlWebpackPlugin中的title不會被編譯到index.ejs(這個問題是因為使用html-withimg-loader后,正則表達式中被匹配到的文件中的<%= %> 會直接被當做字符串原樣輸出,而不會被編譯)。

目前,正確的做法是,在模板文件中,img標簽在引入src路徑時,通過require的方式引入,即:

 <img src="<%= require('./images/cmmn.jpg')%>" style="width: 200px"/>

  然后運行命令 npm run build 就可以看到被打包的信息了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM