Webpack 的使用

打包命令

  • 在當(dāng)前項(xiàng)目路徑下, 輸入命令

  • $ webpack 入口 出口

  • 注意: webpack 命令是全局命令

webpack ./src/main.js ./dist/bundle.js

配置 webpack.config.js 文件

  • 通過(guò) Node.js 導(dǎo)入 pash 包
  • 使用 Node.js 前, 初始化 npm
npm init

倒入模塊路徑

const path = require("path");

配置

module.exports = {
  entry: "./src/main.js", // 入口
  output: {
    // 出口對(duì)象
    path: path.resolve(__dirname, "dist"), // 出口文件路徑
    filename: "bundel.js", // 出口文件名字
    publicPath: "dist/" // 打包資源后自動(dòng)為url锰悼、src添加文件路徑
  }
}

配置 package.json 文件

通過(guò) npm init 得到的 json 文件配置

{
  "name": "meetwebpack",  // 項(xiàng)目名稱
  "version": "1.0.0",   // 項(xiàng)目版本
  "description": "",    // 描述
  "main": "index.js",
  "scripts": {    // 腳本命令映射
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack"
  },
  "author": "",
  "license": "ISC"  // 是否開(kāi)源
}
  • webpack 命令 映射到npm run build
    • 且優(yōu)先在項(xiàng)目中尋找本地命令, 如果本地沒(méi)有該命令再去全局找此命令

Webpack 打包 (ES6/TS 轉(zhuǎn) ES5, Less 轉(zhuǎn) css, vue 轉(zhuǎn) js 等)

  • 在入口 js 中導(dǎo)入此文件

    • 例如: require("./css/normal.css");
  • 為 Webpack 擴(kuò)展 loader

loader 使用

  • 通過(guò) npm 安裝需要使用的 loader

  • 在官網(wǎng)上查找對(duì)應(yīng)的 loader, 例如 css 的 loader: css-loader

  • webpack.config.js 中的 module 關(guān)鍵字下進(jìn)行配置

安裝

npm install css-loader --save-dev

配置

module: {
  rules: [
    {
      test: /\.css\$/,
      use: ["style-loader", "css-loader"]
    }
  ]
}
  • css-loader 只負(fù)責(zé)加載 CSS 文件, 不會(huì)幫助我們解析文件
    • 所以我們還需要安裝解析 CSS 文件的 loader
npm install style-loader --save-dev
  • 然后在 use 屬性中添加style-loader
module: {
  rules: [
    {
      test: /\.css$/,
      use: ["style-loader", "css-loader"]
    }
  ];
}
  • 注意: 在使用多個(gè) loader 時(shí), Webpack 從右向左執(zhí)行
    • 即添加style-loader必須放在css-loader左邊

ES6 轉(zhuǎn) ES5

  • 需要使用 babel 的 loader

安裝

npm install --save-dev babel-loader@7 babel-core babel-preset-es2015

配置

module: {
  rules: [
    {
      test: /\.js$/,
      exclude: /(node_modules|bower_components)/,
      use: {
        loader: "babel-loader",
        options: {
          presets: ["es2015"]
        }
      }
    }
  ]
}

配置 Vue

安裝

npm install vue --save

導(dǎo)入 vue

import Vue from "vue"
  • runtime-only 代碼中, 不可以使用任何的 template

  • runtime-compiler 代碼中, 可以使用 template, 因?yàn)橛?compiler 可以用于編譯 template

  • 解決方案: 指定版本, 在 webpack.config.js 中配置

resolve: {
  alias: { // 別名
    "vue$": "vue/dist/vue.esm.js"
  }
}

編譯 .vue 文件

  • 想要編譯 Vue, 需要安裝兩個(gè) loader 和相應(yīng)的 loader 配置

  • vue-loader(14.x 版本開(kāi)始, 要想使用該 loader 還需要配置一個(gè)插件, 或降低版本, 降低版本后需要重新 npm install)

  • vue-template-compiler (用于解析.vue文件中的template)

Plugin 插件

添加版權(quán)的 Plugin

  • 該插件名字叫 BannerPlugin, 屬于 Webpack 自帶的插件

  • 按照下面的方式來(lái)修改 webpack.config.js 文件

const webpack = require("webpack")
module.exports = {
  plugins: [new webpack.BannerPlugin("版權(quán)歸 coerlion 所有")]
}

打包 HTML 的 plugin

  • 如何將 index.html 打包到 dist 文件夾中呢?
    • HtmlWebpackPlugin 插件可以為我們做這些事情
    • 自動(dòng)生成一個(gè) index.html 文件(可以指定模板來(lái)生成)
    • 將打包的 JS 文件, 自動(dòng)通過(guò) script 標(biāo)簽插入到 body 中

安裝 html-webpack-plugin 插件

npm install html-webpack-plugin --save-dev
  • 使用插件, 修改 webpack.config.js 文件中的 plugins 部分內(nèi)容如下

先導(dǎo)入 html-webpack-plugin

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

再到 module.exports 下進(jìn)行配置

plugins: [
  new htmlWebpackPlugin({
    template: "index.html"
  )}
]
  • 這里的 template 表示根據(jù)什么模版來(lái)生成 index.html

    • 在當(dāng)前目錄下, 根據(jù) index.html 模板文件來(lái)生成一個(gè)在 dist 文件夾下的 index.html 文件
  • 另外, 我們需要?jiǎng)h除之前在 output 中添加的 publicPath 屬性, 否則插入的 script 標(biāo)簽中的 src 可能會(huì)有問(wèn)題

js 壓縮的 Plugin

使用第三方插件uglifyjs-webpack-plugin, 并且版本號(hào)指定 1.1.1, 和 CLI2 保持一致

npm install uglifyjs-webpack-plugin@1.1.1 --save-dev
  • 修改 webpack.config.js 文件, 并且使用

先導(dǎo)入uglifyjs-webpack-plugin

const uglifyJsPlugin = require("uglifyjs-webpack-plugin");

再到 module.exports 下進(jìn)行配置

plugins: {
  new uglifyJsPlugin()
}

搭建本地服務(wù)器

  • Webpack 提供了一個(gè)可選的本地開(kāi)發(fā)服務(wù)器, 這個(gè)本地服務(wù)器基于 Node.js 搭建, 內(nèi)部使用 express 框架

  • 它可以實(shí)現(xiàn)我們想要的讓瀏覽器自動(dòng)刷新顯示我們修改后的結(jié)果(它不會(huì)編譯文件到磁盤(pán)中, 而是存儲(chǔ)在內(nèi)存中)

安裝

npm install --save-dev webpack-dev-server@2.9.3
  • devServer 也是作為 module.exports 中的一個(gè)選項(xiàng), 選項(xiàng)本身可以設(shè)置如下屬性:
    1. contentBase: 為哪一個(gè)文件夾提供本地服務(wù), 默認(rèn)是根文件夾, 我們這里要填寫(xiě)./dist
    2. port: 端口號(hào)
    3. inline: 頁(yè)面是否實(shí)時(shí)刷新
    4. historyApiFallback: 在 SPA 頁(yè)面中, 依賴 HTML的 history 模式

module.exports 配置修改如下:

devServer: {
  contentBase: "./dist",
  inline: true
}

使用

  • 方法 1: node_modules/.bin/webpack-dev-server

  • 方法 2: 在 package.json 中添加 scripts 屬性"dev": "webpack-dev-server", 即可通過(guò)npm run dev的方式直接使用

    • webpack-dev-server 命令參數(shù)
      • 例如 "dev": "webpack-dev-server --open"
      • open 參數(shù)表示直接打開(kāi)瀏覽器

Webpack 配置文件分離

  1. 開(kāi)發(fā)時(shí)配置文件 和 運(yùn)行時(shí)配置文件的分離

  2. 創(chuàng)建文件夾 build

  3. 創(chuàng)建文件 base.config.js 存放開(kāi)發(fā)時(shí)和運(yùn)行時(shí)依賴

  4. 創(chuàng)建文件 dev.config.js 存放開(kāi)發(fā)時(shí)依賴

  5. 創(chuàng)建文件 prod.config.js 存放運(yùn)行時(shí)依賴

安裝 webpack-marge

npm install webpack-merge --save-dev

合并三個(gè)文件

  • 修改 base.config.js 配置文件

  • 將所有開(kāi)發(fā)時(shí)梧税、運(yùn)行時(shí)依賴存放到該文件之后修改 path 路徑

path: path.resolve(__dirname, "../dist")

修改 prod.config.js 配置文件

// 運(yùn)行時(shí)依賴
const UglifyjsWebpackPlugin = require("uglifyjs-webpack-plugin")
const webpackMerge = require("webpack-merge")
const baseConfig = require("./base.config")

module.exports = webpackMerge(baseConfig, {
  plugins: [new UglifyjsWebpackPlugin()]
})

修改 dev.config.js 配置文件

// 開(kāi)發(fā)時(shí)依賴
const webpackMerge = require("webpack-merge")
const baseConfig = require("./base.config")

module.exports = webpackMerge(baseConfig, {
  devServer: {
    contentBase: "./dist",
    inline: true
  }
})

修改 package.json 中的 scripts 下的 builddev 屬性為:

"build": "webpack --config ./build/prod.config.js",
"dev": "webpack-dev-server --open --config ./build/dev.config.js"
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末甫匹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子撇贺,更是在濱河造成了極大的恐慌,老刑警劉巖冰抢,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件松嘶,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡挎扰,警方通過(guò)查閱死者的電腦和手機(jī)翠订,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)遵倦,“玉大人尽超,你說(shuō)我怎么就攤上這事∥嗵桑” “怎么了似谁?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我巩踏,道長(zhǎng)秃诵,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任塞琼,我火速辦了婚禮菠净,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘屈梁。我一直安慰自己嗤练,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布在讶。 她就那樣靜靜地躺著煞抬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪构哺。 梳的紋絲不亂的頭發(fā)上革答,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音曙强,去河邊找鬼残拐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛碟嘴,可吹牛的內(nèi)容都是我干的溪食。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼娜扇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼错沃!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起雀瓢,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤枢析,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后刃麸,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體醒叁,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年泊业,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了把沼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吁伺,死狀恐怖饮睬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情箱蝠,我是刑警寧澤续捂,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布垦垂,位于F島的核電站,受9級(jí)特大地震影響牙瓢,放射性物質(zhì)發(fā)生泄漏劫拗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一矾克、第九天 我趴在偏房一處隱蔽的房頂上張望页慷。 院中可真熱鬧,春花似錦胁附、人聲如沸酒繁。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)州袒。三九已至,卻和暖如春弓候,著一層夾襖步出監(jiān)牢的瞬間郎哭,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工菇存, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留夸研,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓依鸥,卻偏偏與公主長(zhǎng)得像亥至,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贱迟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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

  • # 什么是webpack姐扮?* 問(wèn)題:為什么在 vue 中使用 npm run build 命令就可以把開(kāi)發(fā)環(huán)境中的...
    徒步旅行_72c5閱讀 249評(píng)論 0 0
  • 以下所有配置必須有nodejs環(huán)境支持,最新版本的nodejs默認(rèn)安裝npm包管理器 Download NodeJ...
    LemonCoder閱讀 889評(píng)論 0 1
  • webpack的作用 webpack可以幫助我們處理模塊間的依賴關(guān)系关筒,而且不僅僅是Javascript文件溶握,css...
    debug_LX閱讀 426評(píng)論 0 0
  • 1杯缺、webpack入門(mén) Webpack 是一個(gè)前端資源的打包工具蒸播,它可以將js、image萍肆、css等資源當(dāng)成一個(gè)模...
    余生安好178閱讀 1,065評(píng)論 0 2
  • vue-cli已經(jīng)配置好webpack 能夠了解模塊化的相關(guān)規(guī)范了解webpack 1.模塊化的分類(lèi) A.瀏覽器端...
    zlog閱讀 327評(píng)論 0 1