定義:具備相同屬性和行爲的事物的集合
在前端中:將一些屬性比較相似和行爲比較相似的內容放在同一個js文件裏面,把這個js文件稱爲模塊
目的:爲了每一個js文件只關注與自身有關的事情,讓每一個js文件各行其職javascript
①模塊化:指的就是遵照commonjs規範,解決不一樣js模塊之間相互調用問題
②CommonJS:css
require("B.js");
module.exports=B;
var b = "Hello,I'm module B."; module.exports = b;//暴露一個接口,與b對接。這個接口既能夠是函數,也能夠是對象,甚至是數組。
A.js var _b = require("./B.js");//實際過程當中應當是B.js相對於A.js的路徑,這比使用絕對路徑去獲取要規範得多 //此時_b得到了B.js的接口,這個接口指向B.js中的變量b console.log( _b );//"Hello,I'm module B.";
這就實現了一個簡單的模塊化工做方式,即:④AMD規範:Async Module Define 異步模塊聲明
⑤CMD規範:Common Module Define 公共模塊聲明html
⑥模塊化的核心價值:模塊化最核心的價值在於解決不一樣文件之間的分工和調用問題,即依賴關係。前端
gulp + browerifyjava
npm install gulp --save-dev //要安裝全局仍是本地依賴根據實際狀況來
npm install browserify --save--dev
npm install vinyl-source-stream --save-dev
//基本模塊引入 var gulp = require('gulp'); var brow = require('browerify'); var source = require('vinyl-source-stream'); //任務編寫 gulp.task('bundle', function() { //將任務交付給browserify //brow讀取入口文件後,能自動查找相互之間有依賴的關係的模塊 return brow('./entry.js') .bundle()//輸出一個文件流變量(gulp的工做機制) .pipe(source('bundle.js'))//將文件流變量輸出爲文件 .pipe(gulp.dest('js'));//將文件最終輸出 }
webpack
參考webpack的配置及使用node
define( 'id', [ 'module1', 'module2' ], function( m1, m2 ) { return { arg1: m1, arg2: m2 } //返回值便是module3的接口 });
bower install requirejs//根據我的習慣選擇下載方式,只要保證後續引入的路徑正確
require.config( { base: '',//引入模塊的起始路徑 //paths對象爲要引入的模塊的名稱及路徑,且不需.js後綴,require默認會爲文件添加.js後綴 paths: { 'jquery': './jquery-1.11.0'//這就引入了juery做爲一個模塊。 PS:jquery本身已經實現了AMD,而且'jquery'是一個頂級模塊名。 } } );
main.js require(['jquery'], function( $ ) { $(document).css("background", "#000");//這就實現了引入使用jquery模塊,並用它進行dom操做 });
<script data-main="./main.js" src="./bower-components/requirejs/dist/require.js></script> //main便是主邏輯入口文件
define( function( require, exports, module ) { var c = require('./Controller.js'); c(); })
bower install seajs//這裏根據我的習慣下載seajs的包,只要引入時路徑正確就行
seajs.config({
base: './', //模塊起始路徑 }) seajs.use('./main');//使用主邏輯入口文件,至關於requirejs中的data-main文件
**requireJS和SeaJS都是在前端實現模塊化,至關於一個前端的js模塊化加載器,和webpack不同,webpack是經過nodejs將文件打包的。jquery
體現了一種分層的概念,讓每一個層面只作本身該作的行爲,減小代碼耦合和冗餘webpack