webpack的基礎用法

如果你是作爲前端的一員,可能你對webpack 並不陌生。它可以將很多如js,css,圖片等打包成模塊,正應了一切皆模塊。當我們在寫ES6的某些新語法是=時,有些瀏覽器可能不支持,這是我們可以利用webpack 去和babel 去將其轉化爲現在瀏覽器識別的代碼。但是如果你剛接觸webpack, 可能學習起來對一些概念可能不是很理解,去官網看有時候長篇大論的文檔讓人很蒙圈,網上搜索,出來的結果讓人難懂。我今天就來總結一下,webpack 的用法,如果你想更深入的學習,那推薦你去官網看文檔。如果只是想了解,基本使用,我這篇文章大概可以滿足你。

一、webpack前期工作

1、概念:webpack 是一個現代的 JavaScript 應用程序的模塊打包器(module bundler)

2、四個核心!

  • 入口(Entry) :圖表的起點被稱之爲入口起點
  • 出口(Output) :將所有的資源(assets)歸攏在一起後,我們還需要告訴 webpack 在哪裏打包我們的應用程序
  • 加載器(Loader) :webpack loader 會將這些文件轉換爲模塊,而轉換後的文件會被添加到依賴圖表中。
  • 插件(Plugins) :插件(plugins) 最常用於(但不限於)在打包模塊的“compilation”和“chunk”生命週期執行操作和自定義功能

    概念看不懂,沒關係,往下看,當你深入例子時,這些概念自然而然就知道是什麼意思了。

3、前期環境

使用webpack 是需要node.js的環境。這裏安裝node.js 我不做詳細介紹,網上搜很多,傻瓜式安裝。安裝後我們也就可以使用npm了,如果你覺得npm下載的網速慢,你可以使用淘寶提供的淘寶鏡像 cnpm 去安裝,這裏我也不做詳細介紹,網上去搜索怎麼安裝。

新建一個test 文件

二、安裝webpack

1、安裝webpack

全局安裝 npm install webpack -g

你還可以局部安裝 npm install --save-dev webpack

如果你安裝成功會生成一個 node_modules 文件夾,全局安裝會安裝在c盤下邊,局部安裝會安裝在你的項目裏邊。

這裏寫圖片描述

我這裏是局部安裝的。

2、在test文件中初始化環境: npm init
這時會提示你,設置一些npm包的基本信息,例如名字,版本,描述等等。這裏你可以先不用管它,一直按回車鍵就行。
這裏寫圖片描述

這時你的文件夾裏應該生成了 package.json 文件(打包發佈時的配置文件)。

這裏寫圖片描述

3、搭建文件目錄結構
① 在test 文件中建一個app 文件夾build 文件夾
② 在test文件中建一個webpack.config.js文件 (必須,文件名必須是該文件名)
③ test文件夾中新建一個index.html 文件 和 app.js 文件

app文件夾:是我們的入口文件夾(即entry 要指定的入口文件夾),也就是我們寫代碼,寫js 的文件夾
build文件夾 :是我們的出口文件夾(即output 指定的出口文件夾),也就是我們js 編譯後要存放的文件夾
webpack.config.js: 是webpack 配置文件,webpack啓動時,會先讀取它。

基礎目錄結構如下:

---app
     --index.html
     --app.js
---build
---node_modules
---package.json
---webpack.config.js

這裏寫圖片描述

三、配置webpack.config.js 文件
我們這裏先做一個簡單的例子,讓你更明白,我們把app文件夾下的 app.js 編譯之後(這麼做是因爲有些代碼編譯後才能使用,比如ES6 部分代碼編譯後讓瀏覽器識別,sass 和less 的文件編譯後變成可讀的css文件) ,我們app.js 後放到build 文件夾下。這樣我們需要簡單配置webpack.config.js 文件,配置該文件之前,我們先寫點代碼。

index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>app</title>
</head>
<body>
   <h1>APP</h1>
   <P id="content"></P>

   <script src="../bulid/newApp.js"></script>
</body>
</html>

app.js:

document.getElementById("content").innerHTML = "我是第一個頁面";

好了,我們來配置webpack.config.js 文件

var path = require('path'); // node 全局path API,寫上就行,不要太過於關係
module.exports = {
    entry:'./app/app.js',// 入口文件
    output:{ // 出口文件
       path:path.join(__dirname, 'bulid'), //編譯後文件的保存地址,這裏是相對路徑,記住寫法
       filename: 'newApp.js'  // 編譯後,生成的文件名字
    }

};

這是最基礎的配置。

接下來我們啓動wepack:
① 如果你是全局安裝的 直接 在命令行輸入 webpack
② 如果你是局部安裝的 你可以打開 package.json 文件自己配置一下 命令
例如:
這裏寫圖片描述

將紅色框中的代碼修改爲 “start“:“webpack” 意思是啓動webpack時可以以start 命令代替。
執行: npm start
結果:

這裏寫圖片描述

表示你已經成功了。這時你的build 文件中將會有一個 newApp.js 文件
這裏寫圖片描述

這時我們打開index.html 頁面是時展示的是這樣的:

四、多文件編譯
多文件編譯,我們在向app 文件夾下加入一個apptwo.js 和 index-2.html文件,這時app文件夾中有兩個將要編譯的js文件了,
index-2.html 中寫:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>app</title>
</head>
<body>
   <h1>APP</h1>
   <P id="contentTwo"></P>
   <script src="../bulid/apptwo.js"></script> // index.html頁面要引入app.js
</body>
</html>

apptwo.js:

document.getElementById("contenTwo").innerHTML = "我是第二個頁面";

重點內容
webpack.config.js 文件我們這樣去配置:


var path = require('path');
module.exports = {
    entry:{  //入口文件爲多個文件時,用對象寫法
       app:'./app/app.js',
       apptwo:'./app/apptwo.js'
    },
    output:{
       path:path.join(__dirname, 'bulid'),
       filename: '[name].js' //因爲是多文件所以我們用[name]來爲變量起每個文件生成的對應文件名
    }

};

執行 : npm start
結果bilud 文件夾下生成app.js 文件和 apptwo.js 文件
app文件夾下的 index.html 和 index-2.html 分別會顯示:

這裏寫圖片描述

這裏寫圖片描述

重點內容
在html文件中我們引入js 是這樣引入的 <script src="../bulid/apptwo.js"></script> 其實由於處在node.js 環境中,我們的路徑都是對應的,(相當於在同目錄下)我們就可以寫成這樣 <script src="apptwo.js"></script> 也是能載入js 文件的。

五、自動編譯 熱加載

webpack 爲我們提供了幾個命令:

  • webpack // 最基本的啓動webpack的方法
  • webpack -w //提供watch方法;實時進行打包更新
  • webpack -p // 對打包後的文件進行壓縮
  • webpack -d // 提供source map,方便調式代碼

當我們修改要編譯的代碼後我們不希望每次動 啓動一遍webpack, 這時我們就用到了 webpack -w 命令,觀實時察代碼變化。

① 比如我們執行 npm start -w 命令(這裏我們的是局部的,自己配置的命名 ,如果你安裝的是全局的直接使用 webpack -w, )
② 我們也可以配置 package.json 文件,將其修改爲
這裏寫圖片描述
修改完成之後 運行 npm start
當我們在修改要編譯的js代碼後,直接刷新瀏覽器,代碼就會改變。

另外,我們想,如果我們修改完代碼後,不用重複啓動webpack,同時也不用自己手動刷新瀏覽器,只要我們一保存,瀏覽器自動刷新該怎麼辦。
這時我們就用到了 webpack 的熱加載。
首先想要使用熱加載,我們要安裝 webpack-dev-server
① 安裝webpack-dev-server 命令 : npm install webpack-dev-server
②修改 webpack.config.js 文件

var path = require('path'); // node 全局path API,寫上就行,不要太過於關係
module.exports = {
     entry:{  //入口文件爲多個文件時,用對象寫法
       app:'./app/app.js',
    },
    output:{ // 出口文件
       path:path.join(__dirname, 'bulid'), //編譯後文件的保存地址,這裏是相對路徑,記住寫法
       publicPath: '/bulid/', // **主要是增加這一項** 配置編譯時的公共路徑
       filename: '[name].js'  // 編譯後,生成的文件名字
    }

};

③ 修改 package.json 文件

這裏寫圖片描述

④ html 頁面也需要改動一下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <h1>webpack變化</h1>
    <p id="countent"></p>
    <script src="../bulid/app.js"></script> 
    //這一塊一定要注意,這裏不能寫成 app.js  要寫成具體路徑 ../bulid/app.js  不要實現不了瀏覽器自動刷新功能
</body>
</html>

六、壓縮打包文件
上邊我們打包後的js文件,會有好多註釋,和默認的代碼,如圖:
這裏寫圖片描述

我們想要壓縮代碼,這裏有兩種方法:
1.配置package.json 文件:
這裏寫圖片描述

然後在執行 webpack -p 命令。

得到的app.js 文件將是壓縮的:
這裏寫圖片描述

2.配置 webpack.config.js 文件

var path = require('path'); 
var  webpack = require('webpack'); // 增加
module.exports = {
    entry:{  
       app:'./app/app.js',
    },
    output:{ 
       path:path.join(__dirname, 'bulid'), 
       publicPath: '/bulid/', 
       filename: '[name].js'  
    },
    plugins:[  // 添加
         new webpack.optimize.UglifyJsPlugin()
    ]

};

然後執行, webpack 就會得到與上述同樣的壓縮代碼。

發佈了79 篇原創文章 · 獲贊 97 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章