webpack入門(一)——webpack 介紹

來源:互聯網
上載者:User

標籤:

如今的網站正在演化為web應用程式:
1. 越來越多的使用JavaScript。
2. 現代瀏覽器提供更廣泛的介面。
3. 整頁重新整理的情況越來越少,甚至更多代碼在同一個頁面。(SPA)

因此有很多代碼在用戶端!
一個體量龐大的程式碼程式庫需要好好組織。模組系統提供程式碼程式庫劃分成模組的選項。

模組系統風格

目前有多個標準定義依賴和輸出:
1. script標籤(不要模組系統)
2. CommonJS
3. AMD和它的一些變種
4. ES 6
5. 其它

script 標籤的樣式

下面這種就是不用模組系統,你會怎麼去管理你的代碼。

<script src="module1.js"></script><script src="module2.js"></script><script src="libraryA.js"></script><script src="module3.js"></script>

模組介面匯出到全域對象,即window對象。模組的介面可以訪問全域對象的依賴關係
常見問題

全域衝突
嚴重依賴載入的順序
開發人員必須人工解決模組/庫的依賴關係
大型項目,script一溜下來可以很長,難以管理

CommonJs: 同步載入

這種風格用同步require 的方法去載入一個依賴並用暴露一個介面。 一個模組可以通過給export對象添加屬性或給module.exports設定值 來指定匯出。

require("module");require("../file.js");exports.doStuff = function() {};module.exports = someValue;

伺服器端node.js用的就是這種標準。
優點:
1. 伺服器端模組可以重用
2. 已經有許多模組用這種風格(npm)。生態圈良好
3. 非常簡單和容易使用。
劣勢
1. 阻塞調用不適用網路。網路請求是非同步。
2. 沒有並行載入機制。
哪些在用?
1. 服務端 -node.js
2. browserify
3. modules-webmake -編譯到一個包
4. wreq -用戶端

AMD: 非同步載入

其它模組系統(例如 瀏覽器) 同步載入有困難(CommonJS) 而引入的一個非同步版本(和定義模組和輸出值的一種方法 )。

require(["module", "../file"], function(module, file) { /* ... */ });define("mymodule", ["dep1", "dep2"], function(d1, d2) {  return someExportedValue;});

優點:
1. 適合網路的非同步請求的風格
2. 並行載入多個模組。
劣勢
1. 編碼費力,更難讀和寫
2. 看起來只是權宜之計。
哪些在用?
1. require.js
2. curl

ES6模式

ES6借鑒其它語言給javascript新加了一些文法結構,有import文法。

1 import "jquery";2 export function doStuff() {}3 module "localModule" {}

優點:
1. 靜態分析很容易。
2. 不會過時的ES標準 。
劣勢
1. 瀏覽器支援需要時間。(遲早的事)
2. 很少有模組用這種風格。生態圈
目前沒有公開的方案

開發人員應當自己選擇適合自己的風格。允許現有的代碼和包能正常工作,可以很容易地添加自訂模組風格。

傳輸

模組應該在用戶端執行,所以他們必須從伺服器傳輸到瀏覽器。
傳輸模組有兩個極端:
1. 一個一個地傳。
2. 全部打包在一個裡傳。

兩種用法都泛濫,但是兩種都太low了。

一個一個地傳
優點:只有確實需要的模組才會傳輸過去。
缺點:許多請求意味著很多開銷。
缺點:應用程式啟動緩慢,因為請求延遲
全部一個地傳
優點:請求的開銷更少,更少的延遲
缺點:很多暫時不需要的模組給傳輸過去了。

分塊傳輸

更靈活的傳輸可能會更好。大多數情況下在這兩種極端之間的折中比較好。
=>在編譯所有模組時:把模組切分成小塊兒(chunks)。
這樣允許多個更小、更快的請求。有些模組不是一開始就需要的,含有這些模組的分塊在需要的時候可以載入到。這樣加快了初始化速度,但是在需要用那些模組時仍然讓你去抓更多的代碼。

開發人員怎麼做“切分點”,可以根據情況自由抉擇。
=》一個程式碼程式庫是可能的喲。

注意:這些觀點來自Google GWT.

怎麼可能只有javascript

為什麼一個模組系統只能幫程式猿們解決javascript問題呢?還有許多其他資源需要處理:
樣式表
圖片
web字型
html模板
等等

或者 一些先行編譯和後編譯語言
coffeescript → javascript
elm → javascript
less 樣式→ css 樣式
jade 模板→ javascript 產生 html
i18n files → something
等等

這些東西應該也像下面這樣容易:

require("./style.css");
1 require("./style.less");2 require("./template.jade");3 require("./image.png");
靜態分析

當編譯所有這些模組時,一個靜態分析試圖找到自己的依賴。
傳統上這隻能找到簡單的東西沒有表達 。但是
require("./template/" + templateName + ".jade") 這樣是常見的結構。
有些庫是用一些不一樣的風格寫的。它們有些很奇怪(不可思議)。

策略

聰明的解析辦法允許現存代碼能跑起來,如果程式猿用了一些怪異的東西,它能試圖找到相容的解決方案。

什麼是webpack

webpack是一個模組打包器。webpack把模組(s)連同它的依賴一起打包產生包含這些模組的靜態資源。

為什麼另用一個打包器?

現有的模組打包器不適合大項目(大單頁面應用)程式。代碼分割和靜態資源無縫模組化的迫切需求,催生了一個新的模組打包器。
我試圖擴充現有的模組打包器,但是它沒能實現所有的目標。
目標如下:
1. 把依賴樹切分成塊,實現按需載入。
2. 保持低初始載入時間
3. 每個靜態資源都能是一個模組
4. 具備把第三方庫整合為模組的能力
5. 具備打包器每個部分幾乎都能自己定製的特點。
6. 適合大型項目。

webpack有什麼不同?代碼分割

webpack依賴樹中有兩個依賴類型:同步和非同步。非同步模組切分成一個新的的塊。在塊樹(chunk tree)最佳化之後,檔案會為每個chunk發檔案。

loader

webpack可以處理javascript本身,但loader用來將其它資源轉換為javascript。這樣以來,所有資源都被格式化成模組了。

智能解析

webpack有一個智能解析器,它能處理幾乎所有的第三方庫。它甚至允許你在依賴中你像這樣加運算式 require("./templates/" + name + ".jade") 。它可以處理最常見的模組化標準風格:CommonJS和AMD。

安裝node.js

安裝node.js
包管理工具 npm會一起裝上。

webapck

webpack 可以用用npm 命令來裝

$ npm install webpack -g

webpack 已經全域安裝了,現在 webpack 命令可用了。

項目中使用webpack

你的項目最好也有webpack 依賴。 這樣你可以在項目中自由決定用webpack哪個版本而必去用全域那個webpack。
npm 命令添加一個 package.json檔案

$ npm init

如果你不發布npm包,Init過程中的問題不重要,都可以忽略。
安裝webpack 並添加到package.json中:

$ npm install webpack --save-dev
版本

有兩個webpack版本可用。穩定版本和beta版。beta版 在版本字元中標記為 -beta 。beta版本可能包含脆弱的或者實驗功能,都沒進行過多少測試。正式情境下應該用穩定版。

$ npm install [email protected] --save-dev
開發工具

如果你想用開發工具,先安裝它

$ npm install webpack-dev-server --save-dev

 

 

原文地址:http://blog.csdn.net/keliyxyz/article/details/51571386

webpack入門(一)——webpack 介紹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.