本篇文章主要介紹了詳解webpack模塊化管理和打包工具,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
Webpack簡介
webpack是當下最熱門的前端資源模塊化管理和打包工具。 它可以將許多松散的模塊按照依賴和規則打包成符合生產環境部署的前端資源。還可以將按需加載的模塊進行代碼分隔,等到實際
需要的時候再異步加載。通過 loader 的轉換,任何形式的資源都可以視作模塊,比如 CommonJs 模塊、 AMD 模塊、 ES6 模塊、CSS、圖片、 JSON、Coffeescript、 LESS 等。
模塊系統的演進<script>標簽
<script src="module1.js"></script><script src="module2.js"></script><script src="libraryA.js"></script><script src="module3.js"></script>
這是最原始的 JavaScript 文件加載方式,如果把每一個文件看做是一個模塊,那么他們的接口通常是暴露在全局作用域下,也就是定義在 window 對象中,
不同模塊的接口調用都是一個作用域中,一些復雜的框架,會使用命名空間的概念來組織這些模塊的接口,典型的例子如 YUI 庫。
這種原始的加載方式暴露了一些顯而易見的弊端:
CommonJS規范
CommonJS 是以在瀏覽器環境之外構建 JavaScript 生態系統為目標而產生的項目,比如在服務器和桌面環境中。
CommonJS 規范是為了解決 JavaScript 的作用域問題而定義的模塊形式,可以使每個模塊它自身的命名空間中執行。該規范的主要內容是,模塊必須通過 module.exports 導出對外的變量 或接口,通過 require() 來導入其他模塊的輸出到當前模塊作用域中。
一個直觀的例子
// moduleA.jsmodule.exports = function( value ){ return value * 2;}// moduleB.jsvar multiplyBy2 = require('./moduleA');var result = multiplyBy2(4);AMD規范
AMD(異步模塊定義)是為瀏覽器環境設計的,因為 CommonJS 模塊系統是同步加載的,當前瀏覽器環境還沒有準備好同步加載模塊的條件。
模塊通過 define 函數定義在閉包中,格式如下:
define(id?: String, dependencies?: String[], factory: Function|Object);
id 是模塊的名字,它是可選的參數。
factory 是最后一個參數,它包裹了模塊的具體實現,它是一個函數或者對象。如果是函數,那么它的返回值就是模塊的輸出接口或值。
新聞熱點
疑難解答
圖片精選