webpack學(xué)習(xí)筆記

什么是webpack?

webpack是一個模塊管理工具妻味,用webpack可以管理模塊依賴,并編譯模塊所需的靜態(tài)文件欣福。它可以很好的管理打包開發(fā)中用到的html责球、css、js以及靜態(tài)文件(圖片拓劝,字體)雏逾,使開發(fā)更有效率。
webpack對不同的類型資源郑临,有對應(yīng)的模塊加載器(loader)栖博。
webpack模塊打包器會分析模塊間的依賴關(guān)系,最后生成優(yōu)化且合并后的靜態(tài)資源厢洞。

webpack是以CommonJs規(guī)范書寫代碼仇让,但是對CMD/AMD也支持。

webpack工作流程:

1.通過entry配置入口文件犀变;(如果多個入口文件妹孙,用對象形式表示)
2.通過output配置出口文件;

entry:'./src/index.js',//入口
output:{//出口
      filename:'bundle.js',//打包后的文件名
         //filename:'bundle.[hash:8].js',   //如果希望文件每次生成的新的不一樣文件 也可以加hash戳  在中間加入[hash] :8的意思是只顯示8位
      path:path.resolve('build'),//路徑必須是一個絕對路徑
},

3.使用各種loader處理css获枝、js蠢正、image等資源,并將它們編譯與打包成瀏覽器可以解析的內(nèi)容省店。

安裝webpack

  • 安裝本地的webpack
  • npm init (先初始化)
  • npm install wepack webpack-cli -D //-D是 --save-dev縮寫

webpack可以進(jìn)行0配置

  • 打包工具->輸出后的結(jié)果(js模塊)

  • 打包src文件夾下的

  • npx webpack

  • 打包后會出現(xiàn)一個dist文件

  • 打包(支持我們JS 的模塊化)

手動配置webpack

  • 默認(rèn)配置文件的名字是 webpack.config.js
    • 如果更改配置文件的名字 如webpack.config.my.js
    • 運(yùn)行命令行為 npx webpack --config webpack.config.my.js -D
      需要在package.json文件增加scripts嚣崭,里面放入build
      "scripts": {
      "build": "webpack --config xxx",(xxx為新的名字)
      },
    • 運(yùn)行命令行為 npm run build
    • 如果把build里面 名字去掉 只留下webpack笨触,此時運(yùn)行 npm run build -- --config xxx (中間--不要省略 否則會報錯)
開發(fā)時想用ip地址來訪問,webpack內(nèi)置了一個開發(fā)服務(wù)雹舀,是通過express實現(xiàn)了一個靜態(tài)服務(wù)芦劣。
  • npm install webpack-dev-server -D

  • 執(zhí)行 npx webpack-dev-server

  • 也可以配置packge.json 中scripts
    "scripts": {
    "build": "webpack --config webpack.config.js",
    "dev": "webpack-dev-server"
    },

  • 執(zhí)行命令行 npm run dev
    (好處是并不會真是的打包文件,而是在生成的內(nèi)存中打包)

  • 如果想在當(dāng)前目錄下執(zhí)行说榆,需要在webpack.config.js里進(jìn)行配置

    devServer:{//開發(fā)服務(wù)器的配置
    port:3000,//設(shè)置的端口號
    progress:true,//是否有進(jìn)度條
    contentBase:'./build',//指定的目錄名運(yùn)行
    compress:true//啟動UglifyJsPlugin壓縮
    },

想要自動建立html 然后打包在內(nèi)存中虚吟,就需要插件 html-webpack-plugin
  • 運(yùn)動命令行 npm install html-webpack-plugin -D
  • 然后在webpack.config.js進(jìn)行配置
    plugins:[//是一個數(shù)組,放著所有的webpack插件
        new HtmlWebpackPlugin({//自動生成打包后的HTML模板插件類
            template:"./src/index.html",//模板
            filename:'index.html',
            minify:{//壓縮html文件
                removeAttributeQuotes:true,//刪除雙引號
                collapseWhitespace:true//壓縮成一行
            },
            hash:true, //插入的js文件帶hash戳,為了緩存問題
        })

     ]      

(記住每次先npm run build打包 然后在npm run dev運(yùn)行)

處理css

在js里引入css模塊签财,需要把css變成模塊然后在js中引入 需要合適的loader解析文件

  • npm install css-loader style-loader -D

  • css-loader 是解析

  • 也可以處理less文件 sass stylus node-sass sass-loader stylus stylus-loader

  • 配置webpack.config.js

 module:{
        rules:[//規(guī)則解析 
            //css-loader解析@import這種語法
            //style-loader 是將css插入到head標(biāo)簽中
            //loader的特點串慰,希望單一
            //loader的用法,字符串只用一個loader,如果多個loader需要[]
            //loader的順序是 默認(rèn)從右向左執(zhí)行,從下到上執(zhí)行
            //loader可以寫成對象方式
    
            {test:/\.css$/,use:
                [
                    {
                        loader:'style-loader',
                        options:{//配置指向
                            insertAt:'top'//讓css插入在最上面
                        }
                    },
                        'css-loader'
                ]
           },//匹配正則唱蒸,配置后綴為.css的文件
           //可以處理less文件 sass stylus node-sass sass-loader stylus stylus-loader
           {test:/\.less$/,use:
            [
                {
                    loader:'style-loader',
                },
                'css-loader',
                'less-loader'//把less=》css
            ]
           }
        ]
     }//配置模塊
如果把css抽離 用link標(biāo)簽插入需要插件 mini-css-extract-plugin
  • npm install mini-css-extract-plugin -D
css樣式自動加前綴 需要安裝插件 postcss-loader
  • npm install postcss-loader antuprefixer -D

  • 在webpack.config.js的配置模塊里 加入‘postcss-loader’

  • 需要創(chuàng)建一個postcss.config.js的配置文件
    module.exports = {
    plugins:[require('autoprefixer')]
    }

壓縮css文件邦鲫,需要安裝插件 optimize-css-assets-webpack-plugin
let OptCssAssets=require('optimize-css-assets-webpack-plugin');//壓縮css文件
module.exports = {
    optimization:{//優(yōu)化項
        minimizer:[
            new OptCssAssets()
        ]
    },
}
將高級語法轉(zhuǎn)換成es5
es6轉(zhuǎn)換成es5 安裝babel
  • 需要安裝轉(zhuǎn)換loader babel-loader @babel/core @babel/preset-env
  • 運(yùn)行命令行 npm install babel-loader @babel/core @babel/preset-env -D
  • 配置webpack.config.js,在module里的rules配置規(guī)則
{
            test:/\.js$/,
            use:{
                loader:'babel-loader',
                options:{//用babel-loader需要把es6轉(zhuǎn)換成es5
                    presets:[//預(yù)設(shè) 
                        '@babel/preset-env'
                    ]

                }
        }
},
如果出現(xiàn)es7語法神汹,class類 需要安裝@babel/plugin-proposal-class-properties
@babel/plugin-transform-runtime
  • 在轉(zhuǎn)換 ES2015 語法為 ECMAScript 5 的語法時庆捺,babel 會需要一些輔助函數(shù),例如 _extend屁魏。babel 默認(rèn)會將這些輔助函數(shù)內(nèi)聯(lián)到每一個 js 文件里滔以,這樣文件多的時候,項目就會很大蚁堤。
  • babel 提供了 transform-runtime 來將這些輔助函數(shù)“搬”到一個單獨的模塊 babel-runtime 中醉者,這樣做能減小項目文件的大小。

Polyfill提供的就是一個這樣功能的補(bǔ)充披诗,實現(xiàn)了Array撬即、Object等上的新方法,實現(xiàn)了Promise呈队、Symbol這樣的新Class等

先總結(jié)這些吧 后面繼續(xù)~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末剥槐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子宪摧,更是在濱河造成了極大的恐慌粒竖,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件几于,死亡現(xiàn)場離奇詭異蕊苗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)沿彭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門朽砰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事瞧柔∑崤” “怎么了?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵造锅,是天一觀的道長撼唾。 經(jīng)常有香客問我,道長哥蔚,這世上最難降的妖魔是什么倒谷? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮糙箍,結(jié)果婚禮上恨锚,老公的妹妹穿的比我還像新娘。我一直安慰自己倍靡,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布课舍。 她就那樣靜靜地躺著塌西,像睡著了一般。 火紅的嫁衣襯著肌膚如雪筝尾。 梳的紋絲不亂的頭發(fā)上捡需,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機(jī)與錄音筹淫,去河邊找鬼站辉。 笑死,一個胖子當(dāng)著我的面吹牛损姜,可吹牛的內(nèi)容都是我干的饰剥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼摧阅,長吁一口氣:“原來是場噩夢啊……” “哼汰蓉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起棒卷,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤顾孽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后比规,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體若厚,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年蜒什,在試婚紗的時候發(fā)現(xiàn)自己被綠了测秸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖乞封,靈堂內(nèi)的尸體忽然破棺而出做裙,到底是詐尸還是另有隱情,我是刑警寧澤肃晚,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布锚贱,位于F島的核電站,受9級特大地震影響关串,放射性物質(zhì)發(fā)生泄漏拧廊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一晋修、第九天 我趴在偏房一處隱蔽的房頂上張望吧碾。 院中可真熱鬧,春花似錦墓卦、人聲如沸倦春。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽睁本。三九已至,卻和暖如春忠怖,著一層夾襖步出監(jiān)牢的瞬間呢堰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工凡泣, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留枉疼,地道東北人。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓鞋拟,卻偏偏與公主長得像骂维,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贺纲,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容

  • 全局安裝webpack 全局安裝webpack會有個問題席舍,就是當(dāng)你有兩個項目依賴于不同版本的webpack,就會有...
    説好的妹紙呢閱讀 1,821評論 0 11
  • http://blog.csdn.net/weizengxun/article/details/53448885 ...
    曉盧軒閱讀 615評論 0 0
  • 學(xué)習(xí)目的 學(xué)習(xí)前端構(gòu)建化工具 webpack哮笆,能熟練掌握 并使用 webpack 對項目進(jìn)行打包優(yōu)化来颤。 ...
    _1633_閱讀 1,354評論 0 7
  • 本文主要分為:環(huán)境配置使用配置文件CSS 處理ES6 代碼編輯文件壓縮SASS 處理CSS 與 JS 分離文件處理...
    _月光臨海閱讀 500評論 0 1
  • Webpack 是一個前端資源加載/打包工具。它將根據(jù)模塊的依賴關(guān)系進(jìn)行靜態(tài)分析稠肘,然后將這些模塊按照指定的規(guī)則生成...
    EarthChen閱讀 397評論 0 1