Vue - day5

day5 - webpack

在網(wǎng)頁中會引用那些常見的靜態(tài)資源?

  • JS
    • .js .jsx .coffee .ts(TypeScript 類 C# 語言)
  • CSS
    • .css .less .sass(以前) .scss(類似于less)
  • Image
    • .jpg .png .git .bmp .svg
  • 字體文件(fonts)
    • .svg .ttf .eot .woff .woff2
  • 模板文件
    • .ejs .jade .vue(在webpack中定義組件的方式, 推薦使用)

網(wǎng)頁中引入的靜態(tài)資源多了以后有什么問題?

  1. 網(wǎng)絡加載速度慢, 因為 我們要發(fā)起很多的二次請求;
  2. 要處理錯綜復雜的依賴關系

如何解決

  1. 合并燎含、壓縮胀溺、精靈圖、Base64圖片
  2. 可以使用之前學過的 requireJS 或者 webpack

如何完美實現(xiàn)上述2種解決方案

  1. 使用Gulp, 是基于 task 任務的;
  2. 使用Webpack, 是基于整個項目進行構建的;

什么是 webpack

webpack 是前端的一個項目構建工具, 他是基于Node.js 開發(fā)出來的一個前端工具;

webpack 是一個現(xiàn)代的 JavaScript 應用程序的模塊 打包器(module bundler), 分析你的項目結構,找到JavaScript 模塊以及其他的一些瀏覽器不能直接運行的拓展語言(Sass, Typescript), 并將其轉換和打包為合適的格式以供瀏覽器使用

一切皆模塊

功能: 轉換 打包 合并

為什么需要webpack

現(xiàn)在的前端扳还,越來越復雜哄陶,特別是SPA(single page web application)流行之后帆阳,一個應用程序往往會依賴很多其他的模塊,或者編譯scss屋吨、less蜒谤、stylus等,如果僅僅是靠人來管理是不可能的至扰,這個時候我們必須依賴于webpack來解決鳍徽。

現(xiàn)在最流行的三個SPA的框架,都于webpack緊密相連敢课。

  • React.js + webpack
  • Vue.js + webpack
  • Angular.js + webpack

學習webpack有4個重點內容:

  • 入口(entry)
  • 輸出(output)
  • 加載器(loader)
  • 插件(plugins)

webpack安裝

注意:請先安裝node環(huán)境

npm install webpack@3.11.0 -g

建議大家這樣操作(隨時切換鏡像源):

  1. npm install nrm -g // 安裝nrm
  2. nrm ls // 查看鏡像源
  3. nrm use taobao // 選擇淘寶鏡像阶祭,也可以選擇cnpm

使用webpack

import $ from 'jquery'
//相當于
const $ = require('jquery')

import *** from *** 是ES6中導入模塊的方式

01-webpack-cli

使用命令:webpack 輸入文件路徑 打包后文件路徑將一個文件打包成另外一個文件

02-webpack-config

  1. 配置webpack.config.js

  2. 運行webpack

     var path = require('path')
     
     module.exports = {
         // 入口文件配置
         entry: "./src/app.js",
         
         // 出口文件配置項
         output: {
           // 輸出的路徑,webpack2起就規(guī)定必須是絕對路徑
           path: path.join(__dirname, 'dist'),
           // 輸出文件名字
           filename: "bundle.js"
         }
     }
    

03-webpack-dev-server

默認為--inline模式

  1. 運行:npm init -y

  2. 運行:npm i webpack-dev-server@2.9.7 webpack@3.11.0 -D

     var path = require('path')
     
     module.exports = {
         // 入口文件配置
         entry: "./src/app.js",
         
         // 輸出配置
         output: {
           // 輸出的路徑
           path: path.join(__dirname, 'dist'),
           // 靜態(tài)資源在服務器上運行時的訪問路徑直秆,可以直接http://localhost:8080/dist/bundle.js訪問到服務器中的bundle.js文件
           publicPath: '/dist',
           // 輸出文件名字
           filename: "bundle.js"
         }
     }
    
  3. index.html中修改 <script src="/dist/bundle.js"></script>

  4. 運行:webpack-dev-server

  5. 運行:webpack-dev-server --inline --hot --open --port 8090

  6. 配置script:"dev": "webpack-dev-server --inline --hot --open --port 8090"

  7. npm run dev

webpack-dev-server 幫我們打包生成的bundle.js文件, 并沒有存放到實際的 物理磁盤上; 而是直接托管到了 電腦的內存中, 所以,我們在 項目根目錄中, 根本找不到 bundle.js

04-webpack-css

  1. 安裝npm install css-loader style-loader --save-dev

     module: {
         rules: [
           // 配置的是用來解析.css文件的loader(style-loader和css-loader)
           {
             // 1.0 用正則匹配當前訪問的文件的后綴名是  .css
             test: /\.css$/,
             use: ['style-loader', 'css-loader'] //webpack底層調用這些包的順序是從右到左
           }
         ]
     }
    

05-webpack-less&webpack-sass

npm install less less-loader sass-loader node-sass --save-dev

{
    test: /\.less$/,
    use: [{
        loader: 'style-loader'
    }, {
        loader: 'css-loader'
    }, {
        loader: 'less-loader'
    }]
},


{
    test: /\.scss$/,
    use: [{
        loader: 'style-loader'
    }, {
        loader: 'css-loader'
    }, {
        loader: 'sass-loader'
    }]
}

06-webpack-圖片&字體

  1. npm install file-loader url-loader --save-dev

url-loader封裝了file-loader

{
    test: /\.(png|jpg|gif)/,
    use: [{
        loader: 'url-loader',
        options: {
          // limit表示如果圖片大于50000byte胖翰,就以路徑形式展示,小于的話就用base64格式展示
            limit: 50000
        }
    }]
}

07-webpack-html

  1. npm install html-webpack-plugin --save-dev

  2. 如果添加了title切厘,需要在模板中添加<%= htmlWebpackPlugin.options.title %>

     // 注意需要注釋掉publicPath萨咳,不然會沖突
     
     var HtmlWebpackPlugin = require('html-webpack-plugin')
     
     plugins: [
         new HtmlWebpackPlugin({
             filename: 'index.html',
             template: 'template.html'
         })
     ]
    

08-webpack-babel

  1. npm install babel-core babel-loader babel-preset-env --save-dev

注意:

webpack 1.x | babel-loader <= 6.x

webpack 2.x | babel-loader >= 7.x (推薦) (^6.2.10 也能用, 但是會出現(xiàn)不推薦使用的警告)

webpack 3.x | babel-loader >= 7.1

{
  test: /\.js$/,
  // Webpack2建議盡量避免exclude,更傾向于使用include
  // exclude: /(node_modules)/, // node_modules下面的.js文件會被排除
  include: [path.resolve(__dirname, 'src')]
  use: {
    loader: 'babel-loader',
    // options里面的東西可以放到.babelrc文件中去
    options: {
      presets: ['env']
    }
  }
}

// .babelrc文件內的配置
{
  "presets":["env"]
}

html-wabpack-plugin 插件

使用: 1.引入 2.放到plugins中配置

作用:

  1. 在內存中 生成 html 頁面
  2. 能夠自動把bundle.js 插入到頁面中去
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末疫稿,一起剝皮案震驚了整個濱河市培他,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌遗座,老刑警劉巖舀凛,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異途蒋,居然都是意外死亡猛遍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來懊烤,“玉大人梯醒,你說我怎么就攤上這事‰缃簦” “怎么了茸习?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長壁肋。 經常有香客問我号胚,道長,這世上最難降的妖魔是什么浸遗? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任猫胁,我火速辦了婚禮,結果婚禮上跛锌,老公的妹妹穿的比我還像新娘杜漠。我一直安慰自己,他們只是感情好察净,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布驾茴。 她就那樣靜靜地躺著,像睡著了一般氢卡。 火紅的嫁衣襯著肌膚如雪锈至。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天译秦,我揣著相機與錄音峡捡,去河邊找鬼。 笑死筑悴,一個胖子當著我的面吹牛们拙,可吹牛的內容都是我干的。 我是一名探鬼主播阁吝,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼砚婆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了突勇?” 一聲冷哼從身側響起装盯,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甲馋,沒想到半個月后埂奈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡定躏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年账磺,在試婚紗的時候發(fā)現(xiàn)自己被綠了芹敌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡垮抗,死狀恐怖氏捞,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情借宵,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布矾削,位于F島的核電站壤玫,受9級特大地震影響,放射性物質發(fā)生泄漏哼凯。R本人自食惡果不足惜欲间,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望断部。 院中可真熱鬧猎贴,春花似錦、人聲如沸蝴光。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蔑祟。三九已至趁耗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疆虚,已是汗流浹背苛败。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留径簿,地道東北人罢屈。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像篇亭,于是被迫代替她去往敵國和親缠捌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內容