webpack基本使用教程

定義:

本質(zhì)上箩祥,webpack 是一個(gè)現(xiàn)代 JavaScript 應(yīng)用程序的靜態(tài)模塊打包器。當(dāng)webpack 處理應(yīng)用程序時(shí)肆氓,它會(huì)遞歸地構(gòu)建一個(gè)依賴關(guān)系圖滥比,其中包含應(yīng)用程序需要的每個(gè)模塊,然后將所有這些模塊打包成一個(gè)或多個(gè) bundle做院。

關(guān)鍵詞:模塊化盲泛,打包

作用

簡化前端開發(fā)工作

核心概念

  • 入口:待打包文件所在路徑
  • 輸出:文件打包后輸出的路徑
  • 加載器(loader):處理非js資源
  • 插件(plugin):擴(kuò)展功能

webpack.config.js:

const path = require('path');
const htmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
  entry: path.join(__dirname,'./src/main.js'),  //入口,main.js所在的絕對(duì)路徑
  output: {  //出口
    path: path.join(__dirname,'./dist'),  //main.js的輸出路徑
    filename: 'bundle.js'  //main.js打包后的文件名
  },
  mode: "development",  //開發(fā)模式
  devServer: {  //插件,作用是模擬一個(gè)服務(wù)器,將文件放到服務(wù)器環(huán)境中運(yùn)行
    // contentBase: path.join(__dirname,'./src'),
    open: true,
    port: 3002
  },
  plugins: [  //插件
    new htmlWebpackPlugin({  //作用:將js文件自動(dòng)引入index.html
      template: path.join(__dirname,'./src/index.html')
    })
  ],
  module : {
    rules: [  //加載器
      {test: /\.css$/, use: ['style-loader','css-loader']},//css加載器键耕,從右往左加載
      {test: /\.less$/, use: ['style-loader','css-loader','less-loader']}
    ]
  } 
}

使用步驟

命令行方式配置

1.生成 package.json, 命令 : npm init -y寺滚,注意文件夾名不能為英文或webpack
2.安裝 : npm i -D webpack webpack-cli

  • -D是--save -dev的簡寫,表示安裝的包是在項(xiàng)目開發(fā)期間使用屈雄,不寫默認(rèn)為在上線期間使用
  • webpack是指安裝webpack的核心包
  • webpack-cli包含了一些在終端使用的命令
    3.在 package.json的scripts中,添加腳本
"scripts": {
    "build": "webpack main.js"
 },
// webpack 是webpack-cli 中提供的命令, 用來實(shí)現(xiàn)打包的
// ./main.js 入口文件,要打包哪個(gè)文件

4.創(chuàng)建一個(gè)main.js文件

console.log('webpack 的入口文件被打包了');

5.運(yùn)行 : npm run build
6.設(shè)置開發(fā)狀態(tài) : mode

"build" : "webpack ./main.js --mode development"
// 項(xiàng)目開發(fā)的兩種環(huán)境
//1. 開發(fā)環(huán)境 (development) : 開發(fā)過程就是開發(fā)環(huán)境
//2. 生產(chǎn)環(huán)境 (production) : 線上環(huán)境, 也就是 : 項(xiàng)目做好了,發(fā)布上線
//生產(chǎn)環(huán)境下, 打包生產(chǎn)的js文件都是壓縮后的,  開發(fā)環(huán)境下代碼一般是不壓縮的
配置文件方式配置
  1. 項(xiàng)目根目錄下, 創(chuàng)建一個(gè) webpack.config.js文件 (文件名固定死)村视,若要專門指定其他文件 : --config webpack.XX.js
  2. webpack.config.js 中,進(jìn)行配置
  • webpack 是基于 node的 , 所以配置文件符合 node 方式書寫配置
  • 注意 : 不要在這個(gè)文件中使用ES6的的模塊化 import語法,main.js里可以使用,是因?yàn)橐ㄟ^webpack轉(zhuǎn)化為es5的,而這個(gè)是webpack的配置文件,是用來轉(zhuǎn)化別的文件的
  1. 修改 package.json 中的 scripts , 腳本命令為: "build": "webpack"
  2. 執(zhí)行命令 : npm run build
  3. 示例代碼
const path = require('path')

module.exports = {
  // 入口
  entry: path.join(__dirname, './src/js/main.js'),
  // 出口
  output: {
    // 出口目錄
    path: path.join(__dirname, './dist'),
    filename: 'bundle.js'
  },
  // 開發(fā)模式
  mode: 'development'
}
配置插件

webpack-dev-server


  1. webpack-dev-server 使用 webpack 必備的功能(插件)

作用 : 為使用 webpack 打包提供一個(gè)服務(wù)器環(huán)境

  • 1.1 自動(dòng)為我們的項(xiàng)目創(chuàng)建一個(gè)服務(wù)器
  • 1.2 自動(dòng)打開瀏覽器
  • 1.3 自動(dòng)監(jiān)視文件變化,自動(dòng)刷新瀏覽器
  1. 使用步驟
  • 2.1 安裝 : npm i -D webpack-dev-server
  • 2.2 兩種使用方式: 1-命令行 2-配置文件(推薦)
  1. 方式 1 : 命令行配置
  • 3.1 腳本 : "dev" : "webpack-dev-server"

  • 3.2 運(yùn)行到 npm run dev

  • 3.3 查看路徑 : "http://localhost:8080/"

  1. 一些問題:
  • 問題 1 : 顯示的只是一些列表 => 只有進(jìn)入 src 才可以顯示頁面

解決 : 想要查看直接進(jìn)入 src 文件 : 添加 --contentBase src

  • 問題 2 : 輸出文件放在根目錄酒奶,所以需要修改引入文件的路徑

解決 : <script src="/bundle.js"></script>

  • 問題 3 : 自動(dòng)打開瀏覽器

解決 : 添加 --open

  • 問題 4 : 指定端口號(hào)

解決 : 添加 --port 3001

  • 問題 5 : 熱更新

package.json里添加--hot

 "scripts": {
    "dev1": "webpack-dev-server --contentBase src --open --port 3001 --hot",
    "build": "webpack "
  },
  1. 配置文件配置
// hot 不要寫在配置文件里面,,不然的話還要配其他插件麻煩
 "dev" : "webpack-dev-server --hot",

  devServer: {
    open : true,
    contentBase : path.join(__dirname,'./src'),
    port : 3001
  }

html-webpack-plugin


  1. html-webpack-plugin (必備的插件)
作用 :
  • 能夠自動(dòng)引入js文件
  • 能夠根據(jù)指定的模板文件 (index.html),在內(nèi)存中生成一個(gè)新的 index.html,并且在瀏覽器中打開的頁面,就是該插件在內(nèi)存中生成的頁面
  • contentBase : path.join(__dirname,'./src'), dev-server 中的這個(gè)也就無效了, 因?yàn)闀?huì)自動(dòng)打開index.html頁面,不需要自己指定了
  1. 安裝 : npm i html-webpack-plugin -D
  2. 配置

第一步: 引入模塊

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

第二步: 配置

// 插件
plugins: [
  // 使用插件 指定模板
  new htmlWebpackPlugin({
    template: path.join(__dirname, './src/index.html')
  })
]
配置加載器

webpack 只能處理 js 文件,非 js(css.less.圖片.字體等)處理處理不了, 借助 loader 加載器

// loader 加載器
  module: {
    rules: [
      // 1. 處理css
      // 說明 : style-loader 和 css-loader 順序不要換
      // 加載處理的順序就是從后往前
      // css-loader : 處理css文件, 加載成一個(gè)模塊
      // style-loader: 創(chuàng)建style標(biāo)簽,插入index.html. 
      { test: /\.css$/ , use : ['style-loader','css-loader']},
      // 2. 處理 less
      { test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] },
      // 3. 處理圖片
      // base64 這是一種編碼格式, 文件/圖片都可以轉(zhuǎn)化為base64格式,可以在瀏覽器中顯示
      // base64 是一種字符串形式
      // 如果圖片小的話,可以使用 base64 , 如果圖片太大的話轉(zhuǎn)化為base64 反而影響性能
      // { test : /\.(jpg|png|gif)$/, use:['url-loader'] }
      {
        test: /\.(jpg|png|gif)$/, use: [{
          loader: 'url-loader',
          options: {
            // 如果圖片大小 <  limit的值100000 可以轉(zhuǎn)化為base64  url-loader
            // 如果圖片大小 >= limit的值 100000 不要轉(zhuǎn)化為base64  引入本地文件  轉(zhuǎn)化為哈希值(32)  file-loader
            limit : 50000
          }
        }]
      },
      // 處理字體圖標(biāo)
      { test: /\.(eot|svg|ttf|woff|woff2)$/, use: ['url-loader'] },
      
      // 處理es6 的語法
      { test : /\.js$/,use:['babel-loader'], exclude:/node_modules/ }
    ]
  }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蚁孔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子惋嚎,更是在濱河造成了極大的恐慌杠氢,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件另伍,死亡現(xiàn)場離奇詭異鼻百,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門温艇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來因悲,“玉大人,你說我怎么就攤上這事勺爱』瘟眨” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵琐鲁,是天一觀的道長蝎土。 經(jīng)常有香客問我,道長绣否,這世上最難降的妖魔是什么誊涯? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮蒜撮,結(jié)果婚禮上暴构,老公的妹妹穿的比我還像新娘。我一直安慰自己段磨,他們只是感情好取逾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著苹支,像睡著了一般砾隅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上债蜜,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天晴埂,我揣著相機(jī)與錄音,去河邊找鬼寻定。 笑死儒洛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的狼速。 我是一名探鬼主播琅锻,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼向胡!你這毒婦竟也來了恼蓬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤僵芹,失蹤者是張志新(化名)和其女友劉穎处硬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淮捆,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡郁油,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了攀痊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片桐腌。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖苟径,靈堂內(nèi)的尸體忽然破棺而出案站,到底是詐尸還是另有隱情,我是刑警寧澤棘街,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布蟆盐,位于F島的核電站,受9級(jí)特大地震影響遭殉,放射性物質(zhì)發(fā)生泄漏石挂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一险污、第九天 我趴在偏房一處隱蔽的房頂上張望痹愚。 院中可真熱鬧,春花似錦蛔糯、人聲如沸拯腮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽动壤。三九已至,卻和暖如春淮逻,著一層夾襖步出監(jiān)牢的瞬間琼懊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國打工爬早, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肩碟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓凸椿,卻偏偏與公主長得像削祈,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子脑漫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353