1、官方解釋
從本質來講,webpack是一個現在的javaScript應用的靜態模組化打包工具。 (從兩點概括這句話即模組和打包)
下面來談談模組和打包的概念吧!
2.前端模組化
3、打包如何理解?
webpack和grunt/gulp的比較
grunt/gulp的核心是Task
1.可以配置一系列的task,並且定義task要處理的事務(例如ES6、ts轉換、圖片壓縮、scss轉成css)
2.之後讓grunt/gulp來依序執行這些task,而且讓整個流程自動化
來看一個gulp的task
1.下面的task就是將src下面的所有js檔案轉換成ES5的語法。
2.並且最終輸出到dist資料夾中。
什麼時候用grunt/gulp?
1.工程模組依賴非常簡單,甚至沒有用到模組化的概念
2.只需要進行簡單的合併、壓縮,就使用grunt/gulp即可
3.如果整個專案使用了模組化管理,而且相互依賴非常強,我們就可以使用webpack。
grunt/gulp和webpack有什麼不同?
1. grunt/gulp更強調的事前端流程的自動化,模組化不是它的核心
2.webpack更強調模組化開發管理,而檔案壓縮合併、預處理等功能,是他附帶的功能
( wepack為了正常運作必須依賴node環境,而node環境為了可以正常的執行,必須使用npm工具管理node中各種依賴的套件)
1、檔案和資料夾解析
以下為mathUtils.js檔案和main.js檔案中的程式碼:(CommonJS模組化規範,CommonJS是模組化的標準,nodejs就是CommodJS(模組化)的實作)
2、指令
webpack ./src/main.js ./dist/bundle.js (將main.js檔案打包成bundle.js檔案)
說明:同理,也可以使用ES6的模組化規範
3.建立webpack.config.js檔案簡化打包指令
(將打包指令對應為打包入口和出口)
該檔案中的程式碼:
entry:為打包的入口
output:為打包的出口
說明:如果想使用node,必須依賴package.json文件
運行npm install [email protected] --save-dev之後,增加了依賴如下
4.將webpack指令映射npm run
除了將webpack映射入口,出口之外,還可以將webpack指令映射為npm run一些操作(需要在package.json內**“script”** 腳本標籤中修改)。 。
1、什麼是loader
現在我們來思考一下webpack用來做什麼?
2、loader使用過程
1)、css檔處理
準備工作:
1、在src目錄中,建立一個css文件,其中創建一個normal.css文件
2、重新組織文件的目錄結構,將零散的js文件放在一個js資料夾中
3、normal.css中的程式碼非常簡單,就是將body設為red
4.但此時normal.css中的樣式還不會生效,因為沒有引用它,webpack也找不到它,因為我們只有一個入口,webpack會從入口開始查找其他依賴的檔案。
5.此時我們必須在main.js即入口檔案引用
之後我們需要導入對應的loader進行使用!
步驟一:透過npm安裝需要使用的loader
(npm install --save-dev css-loader )(npm install --save-dev style-loader)
在webpack的官方中,找出以下關於樣式的loader使用方法:
步驟二:在webpack.config.js中的modules關鍵字下進行設定
說明: 其中css-loader只負責載入css文件,並不負責將css具體樣式嵌入到文件中
此時,我們還需要一個style-loader幫我們處理
注意: style-loader需要放在css-loader的前面。
2)、less檔案處理
步驟1 :安裝對應的loader(注意:這裡也安裝了less,因為webpack會使用less對less檔案進行編譯)。指令: npm install --save-dev less-loader less
步驟2 :修改對應的設定檔(在webpack.config.js)中加入一個rules選項,用於處理.less檔。如下:
3)、圖片檔案處理
步驟1 :在專案中加入兩張圖片(一張小於8kb,另一張大於8kb)
步驟2 :先考慮在css樣式中引用圖片,如下
步驟3 :修改對應的設定檔(在webpack.config.js)中新增一個rules選項,用於處理圖片檔案。如下:
步驟4 :打包之後發現出錯,因為大於8kb的圖片會透過file-loader進行處理,但我們的專案中並沒有file-loader。 (需要安裝file-loader ,指令npm install --save-dev file-loader),安裝之後在打包,就會發現dist資料夾下多了一個圖片檔。
說明:
發現webpack自動幫我們產生了一個非常長的名字
1、這是一個32位元hash值,目的是防止名字重複
2、但是,實際開發中,可能對打包的圖片名字有一定的要求
所以,我們可以在options中添加以下選項:
1、img:文件要打包到的資料夾
2、name:取得圖片原來的名字,放在該位置
3.hash8:為了防止圖片名稱衝突,依然使用hash,但只保留8位
4、ext:使用圖片原來的副檔名如下:
之後還需要配置修改圖片使用的路徑
1、預設情況下,webpack會將產生的路徑之際傳回給用戶
2.但是,整個程式是打包在dist資料夾下的,所以這裡需要在路徑下再增加一個dist/
如下:
綜上,打包之後,圖片檔為這樣
4)、ES6轉ES5的babel
步驟2:在main.js中導入vue(import Vue from 'vue' )如下
步驟3:在index.html內將p掛在到vue實例上,如下
步驟4:打包後發現錯誤,我們需要指定我們使用的vue是runtime-compiler版本的。
具體操作:需要在webpack新增resolve ,取一個別名( alias ),如下:
步驟1:在index.html將p掛在到vue實例上
步驟2:將APP元件匯入在main.js檔案中,並在Vue實例裡面註冊APP ,在Vue模板中使用該元件APP (元件化)
步驟3:建立APP.vue文件,將vue頁面的範本和js程式碼, css程式碼分離,如下
步驟4:設定vue相應的loader,
修改webpack.config.js的設定檔:
1、認識plugin
2、webpack-新增版權資訊Plugin的使用
3、打包html的plugin
4、js壓縮的Plugin
webpack提供了一個可選的本機開發伺服器,這個本機伺服器是基於node.js搭建,內部使用express框架,可以實現我們想要的讓瀏覽器自動刷新顯示修改後的結果。
不過它是一個單獨的模組,在webpck中使用之前需要安裝它指令:(npm install --save-dev [email protected])
devserver也是作為webpack中的一個選項,選項本身可以設定如下屬性:
1、contentBase:為哪一個資料夾提供本地服務,預設是根資料夾,我們這裡要填寫./dist
2、port:連接埠號
3、inline:頁面即時刷新
4、historyApiFallback:在SPA頁面中,依賴HTML5的history模式
webpack.config.js檔案配置修改如下:
–open參數表示直接開啟瀏覽器
除此之外,
下面我們想webpack設定檔分開:也就是把開發時需要用的東西和發布(編譯)用到的東西分離開。如下:
1、CLI是什麼意思?
2、Vue CLI使用前提--Node (需要安裝node)
然而使用Node,必須涉及到npm ,
什麼是NPM?
3.Vue CLI的使用
安裝Vue腳手架
npm install -g @vue/cli
注意:上面安裝的是Vue CLI3的版本,如果需要想按照Vue CLI2的方式初始化項目時不可以的
Vue CLI2初始化項目
vue init webpack my -project