真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Webpack4.X從入門(mén)到精通-module(四)

概念

webpack中任何一個(gè)東西都稱為模塊,js就不用說(shuō)了。一個(gè)css文件,一張圖片、一個(gè)less文件都是一個(gè)模塊,都能用導(dǎo)入模塊的語(yǔ)法(commonjsrequire,ES6import)導(dǎo)入進(jìn)來(lái)。webpack自身只能讀懂js類型的文件,其它的都不認(rèn)識(shí)。但是webpack卻能編譯打包其它類型的文件,像ES6、JSXless、typeScript等,甚至css、images也是Ok的,而想要編譯打包這些文件就需要借助loader

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的滄縣網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

loader就像是一個(gè)翻譯員,瀏覽器不是不認(rèn)識(shí)這些東西么?那好交給loader來(lái)辦,它能把這些東西都翻譯成瀏覽器認(rèn)識(shí)的語(yǔ)言。loader描述了webpack如何處理非js模塊,而這些模塊想要打包loader必不可少,所以它在webpack里顯得異常重要。loader跟插件一樣都是模塊,想要用它需要先安裝它,使用的時(shí)候把它放在module.rules參數(shù)里,rules翻譯過(guò)來(lái)的意思就是規(guī)則,所以也可以認(rèn)為loader就是一個(gè)用來(lái)處理不同文件的規(guī)則

文件目錄

這節(jié)課需要用到圖片跟樣式,所以我要按傳統(tǒng)的目錄結(jié)構(gòu)來(lái)創(chuàng)建目錄,目錄如下
結(jié)構(gòu)目錄
Webpack 4.X 從入門(mén)到精通 - module(四)

處理CSS

所需loader

style-loader   //把處理完的css放到style標(biāo)簽里
css-loader     //處理css

安裝

npm i style-loader css-loader -D

index.css文件內(nèi)容如下:

#box{
    width: 800px;
    height: 500px;
    border: 5px solid #999;
    color: #00f;
    background: green;
}

index.js文件內(nèi)容如下:

import '../css/index.css';  //兩個(gè)點(diǎn)是找上級(jí)目錄

通過(guò)前面的課程大家要明白,webpack的入口文件是index.js,如果要處理其它類型的文件,就需要在入口文件里把其它類型的文件導(dǎo)入進(jìn)來(lái),而在webpack中所有文件都是模塊,所以可以使用require或者import導(dǎo)入其它文件

package.json文件內(nèi)容如下:

{
  "name": "webpack-demo",
  "version": "1.0.0",
  "description": "",
  "main": "webpack.config.js",
  "scripts": {
    "build": "webpack --mode production",
    "dev": "webpack-dev-server --mode development"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "css-loader": "^1.0.0",
    "html-webpack-plugin": "^3.2.0",
    "style-loader": "^0.21.0",
    "webpack": "^4.16.3",
    "webpack-cli": "^3.1.0",
    "webpack-dev-server": "^3.1.5"
  }
}

webpack.package.json文件內(nèi)容如下:

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

module.exports={
    entry:{
        index:'./src/js/index.js',
    },
    output:{
        path:path.resolve(__dirname,'dist'),
        filename:'[name].bundle.js'
    },
    plugins:[
        new HtmlWebpackPlugin({
            title:'陳學(xué)輝',
            template:'./src/template.html',
            filename:'index.html',
        })
    ],
    devServer:{
        host:'localhost',
        port:1573,
        open:true,
    },
    module:{
        rules:[
            {
                test:/\.css$/,  //以點(diǎn)開(kāi)始css結(jié)尾的文件
                use:['style-loader','css-loader']   //順序不能搞錯(cuò)
            }
        ]
    },
}   

執(zhí)行命令npm run dev后就可以看到效果

說(shuō)明

  1. rules里的數(shù)據(jù)類型為對(duì)象,每一個(gè)loader都是一個(gè)對(duì)象
  2. test表示loader要處理什么類型的文件,這里用了一個(gè)正則去匹配文件類型
  3. use表示要使用哪個(gè)loader,它的值是個(gè)數(shù)組,loader的使用順序是從后往前
  4. 這個(gè)loader的意思為,在入口文件里找到.css類型的文件,先拿css-loader去處理成瀏覽器認(rèn)識(shí)的css,再拿style-loader把處理后的css放在頁(yè)面的style標(biāo)簽里

css-loader其它配置:https://www.webpackjs.com/loaders/css-loader/
style-loader其它配置:https://www.webpackjs.com/loaders/style-loader/

單獨(dú)提取CSS

執(zhí)行命令npm run build后,在dist目錄里只有兩個(gè)文件,一個(gè)index.bundle.js一個(gè)index.html文件,并沒(méi)有css文件,同時(shí)打開(kāi)index.html源碼后也沒(méi)有發(fā)現(xiàn)有css的內(nèi)容。這是因?yàn)?code>style-loader的作用,它把css一同打包到了js文件里,js文件在能過(guò)DOM動(dòng)態(tài)創(chuàng)建style標(biāo)簽并添加到頁(yè)面里。所以css的內(nèi)容已經(jīng)放到了index.bundle.js里。
Webpack 4.X 從入門(mén)到精通 - module(四)

這種形式只有當(dāng)文件內(nèi)容不多的時(shí)候可以使用,如果CSS的內(nèi)容以及JS的內(nèi)容非常的多,把兩塊都打包到一個(gè)文件里就會(huì)增加文件的體積,用戶打開(kāi)頁(yè)面的時(shí)候下載速度會(huì)受影響,同減肥影響用戶體驗(yàn)。這就需要把CSS文件單獨(dú)拎出來(lái),那需要一個(gè)插件來(lái)配合loader才能完成

mini-css-extract-plugin

webpack版本需要4.3以上,低版本請(qǐng)使用extract-text-webpack-plugin
使用步驟:
1、安裝

npm i mini-css-extract-plugin -D

2、在webpack.config.js里引入模塊

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

3、寫(xiě)入plugins

plugins:[
    new HtmlWebpackPlugin({
        title:'陳學(xué)輝',
        template:'./src/template.html',
        filename:'index.html',
    }),
    new MiniCssExtractPlugin({
        filename:'css/index.css'    //文件目錄會(huì)放入output.path里
    }),
]

4、寫(xiě)入loader

module:{
    rules:[
        {
            test:/\.css$/,
            use:[MiniCssExtractPlugin.loader,"css-loader"]  //代替style-loader
        }
    ]
}

執(zhí)行命令npm run build后可以看到dist目錄里已經(jīng)多了一個(gè)css文件夾,這個(gè)文件夾里放了一個(gè)index.css文件。打開(kāi)index.html源碼看到css文件已經(jīng)通過(guò)link標(biāo)簽引入,這些功能都是mini-css-extract-plugin所做的
Webpack 4.X 從入門(mén)到精通 - module(四)
Webpack 4.X 從入門(mén)到精通 - module(四)

mini-css-extract-plugin其它配置:https://github.com/webpack-contrib/mini-css-extract-plugin

處理圖片

所需loader

file-loader   //解析地址
url-loader    //把圖片地址解析成base64

安裝

npm i file-loader url-loader -D

index.css文件內(nèi)容如下:

#box{
    width: 800px;
    height: 500px;
    border: 5px solid #999;
    color: #00f;
    /*background: green;*/

    background: url(../images/img_01.jpg);  //背景改成了圖片
}

index.js文件內(nèi)容如下:

import '../css/index.css';  //兩個(gè)點(diǎn)是找上級(jí)目錄

webpack.package.json文件內(nèi)容如下:

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

module.exports={
    entry:{
        index:'./src/js/index.js',
    },
    output:{
        path:path.resolve(__dirname,'dist'),
        filename:'[name].bundle.js'
    },
    plugins:[
        new HtmlWebpackPlugin({
            title:'陳學(xué)輝',
            template:'./src/template.html',
            filename:'index.html',
        })
    ],
    devServer:{
        host:'localhost',
        port:1573,
        open:true,
    },
    module:{
        rules:[
            {
                test:/\.css$/,  //以點(diǎn)開(kāi)始css結(jié)尾的文件
                use:[
                    //這是一個(gè)loader,如果loader需要給參數(shù),就寫(xiě)成對(duì)象的形式
                    {
                        loader:MiniCssExtractPlugin.loader, //loader是哪個(gè)
                        options:{   //所有的配置參數(shù)都要放在這個(gè)對(duì)象里面
                            publicPath:'../'    //這個(gè)表示在css文件里但凡用到地址的地方在其前面加個(gè)目錄'../',這個(gè)是為了能找到圖片
                        }
                    },
                    'css-loader'    //這個(gè)loader沒(méi)有其它選項(xiàng)就直接寫(xiě)
                ]
            },
            {
                test:/\.(jpg|png|gif)$/,    //找到三種格式中的任意一種
                use:['file-loader']
            }
        ]
    },
}   

執(zhí)行命令npm run dev后就可以看到效果

說(shuō)明

  1. loader既可以寫(xiě)成字符串的形式,也可以寫(xiě)成對(duì)象的形式。如果這個(gè)loader需要給一些配置,那就需要寫(xiě)成對(duì)象的形式,所有的配置放到options
  2. 這里一定要注意第一個(gè)loaderuse屬性,它里面放的是一個(gè)個(gè)loader,每個(gè)loader的值既可以是對(duì)象形式,又可以是字符串形式

file-loader其它配置:https://www.webpackjs.com/loaders/file-loader/

在HTML文件中使用圖片

index.js文件內(nèi)容如下:

import '../css/index.css';

import img1 from '../images/img_01.jpg';
import img2 from '../images/img_02.jpg';

const loadImg=img=>{
    const newImg=new Image();
    newImg.onload=()=>document.body.appendChild(newImg);
    newImg.src=img;
};

loadImg(img1);
loadImg(img2);

webpack.package.json文件內(nèi)容如下:

const path=require('path');
const HtmlWebpackPlugin=require('html-webpack-plugin');
const MiniCssExtractPlugin=require("mini-css-extract-plugin");

module.exports={
    entry:{
        index:'./src/js/index.js',
    },
    output:{
        path:path.resolve(__dirname,'dist'),
        filename:'[name].bundle.js'
    },
    plugins:[
        new HtmlWebpackPlugin({
            title:'陳學(xué)輝',
            template:'./src/template.html',
            filename:'index.html',
        }),
        new MiniCssExtractPlugin({
            filename:'css/index.css'
        }),
    ],
    devServer:{
        host:'localhost',
        port:1573,
        open:true,
    },
    module:{
        rules:[
            {
                test:/\.css$/,
                use:[
                    {
                        loader:MiniCssExtractPlugin.loader,
                        options:{
                            publicPath:'../'
                        }
                    },
                    "css-loader"
                ]
            },
            {
                test:/\.(jpg|png|gif)$/,
                //use:['file-loader']
                use:[
                    {
                        loader:'url-loader',    //把圖片轉(zhuǎn)成base64
                        options:{
                            limit:50*1024,  //小于50k就會(huì)轉(zhuǎn)成base64
                            outputPath: 'images'
                        }
                    }
                ]

                //use:'url-loader?limit=50000&outputPath=images'    //loader的另一種寫(xiě)法,與get請(qǐng)求方式相同
            }
        ]
    },
}   

執(zhí)行命令npm run dev后就可以看到效果

說(shuō)明

  1. url-loader的作用是把圖片轉(zhuǎn)成base64,它同樣可以給配置參數(shù)
  2. limit的作用是小于這個(gè)值就會(huì)轉(zhuǎn)base64
  3. 只用了url-loader,并沒(méi)有用file-loader,說(shuō)明url-loader里已經(jīng)包含了file-loader的功能
  4. loader還可以寫(xiě)成地址的形式,與get的請(qǐng)求方式相同

Webpack 4.X 從入門(mén)到精通 - module(四)
url-loader其它配置:https://www.webpackjs.com/loaders/url-loader/

資料下載:https://pan.baidu.com/s/1tgNtUZHe3oTmVMi96tHTXQ

下一篇:Webpack 4.X 從入門(mén)到精通 - loader(五)


文章題目:Webpack4.X從入門(mén)到精通-module(四)
網(wǎng)站URL:http://weahome.cn/article/poihoj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部