1. 程式人生 > >(9/24) 圖片跳坑大戰--css分離與圖片路徑處理

(9/24) 圖片跳坑大戰--css分離與圖片路徑處理

前言:

在上一節當中,我們把小圖片打包成Base64格式(打包到了js當中)。我們也算是對webpack對圖片的打包有個基本瞭解。

本節我們準備把css從JavasScript程式碼中分離出來,這會遇到兩個問題,一是如何分離,而是分離之後的圖片路徑問題,下面我們逐一破解。

1.把css從JavasScript程式碼中分離出來

有些簡單的互動頁面中,你的JavasScript頁面程式碼會非常少,而大部分程式碼都在CSS中,這時為了便於對css的維護,就需要把css單獨提出來,以便修改維護。

這裡使用到extract-text-webpack-plugin外掛。

1.1.外掛安裝

npm install --save-dev 
[email protected]

1.2.外掛引入

安裝完成後,需要在webpack.config.js中先用require引入。

const extractTextPlugin = require("extract-text-webpack-plugin")

1.3.設定plugins

引入成功後需要在plugins屬性中進行配置。這裡只要new一下這個物件就可以了。

new extractTextPlugin("/css/index.css")

這裡的/css/index.css是分離後的路徑位置。配置完成後,需要在包裝程式碼:還要修改原來我們的style-loader和css-loader。

1.4.使用外掛包裝程式碼

修改程式碼如下,同時把limit值修改小一點,不打包成base64。

module:{
        rules: [
            {
              test: /\.css$/,
              use: extractTextPlugin.extract({
                fallback: "style-loader",
                use: "css-loader"
              })
            },{
               test:
/\.(png|jpg|gif)/ , use:[{ loader:'url-loader', options:{ limit:500 } }] } ] },

1.5.打包

完成上邊步驟後,使用webpack命令進行打包。

webpack

 

1.6. 啟動服務

打包完成後,使用npm run server 啟動服務。

 此時我們訪問http://localhost:1818/發現我們的圖片不見了,這是由於打包後的圖片路徑出了問題,下面我們就來解決這個問題。

2.圖片路徑問題

利用extract-text-webpack-plugin外掛很輕鬆的就把CSS檔案分離了出來,但是CSS路徑並不正確,其中一種解決辦法為使用publicPath解決。

publicPath:是在webpack.config.js檔案的output選項中,主要作用就是處理靜態檔案路徑的。

2.1.宣告物件

在處理前,我們在webpack.config.js 上方宣告一個物件,叫open_path。

var open_path ={
    publicPath:"localhost:1818/"
}

注意,這裡的IP和埠,是你本機的ip或者是你devServer配置的IP和埠。

2.2配置output

然後在output選項中引用這個物件的publicPath屬性

//出口檔案的配置項
    output:{
        //輸出的路徑,用了Node語法
        path:path.resolve(__dirname,'dist'),
        //輸出的檔名稱
        filename:'[name].js',
        publicPath:open_path.publicPath
    },

2.3 打包+啟動服務

配置完成後,你再使用webpack命令進行打包,你會發現原來的相對路徑改為了絕對路徑,同時訪問http://localhost:1818/我們發現圖片出來了。