輕輕談一下seaJs——模組化開發的利器

來源:互聯網
上載者:User

標籤:前端   js   seajs   javascript   前端開發   

      “僅做一件事,做好一件事。”

      這個應該就是seaJs的精髓了。

      我在自己的一些項目中使用過seaJs,對其算是瞭解一二,現在就班門弄斧,輕輕地談一下。

      首先上一段度娘的話:

     “seaJs是一個遵循CommonJs規範的JavaScript模組載入架構,可以實現JavaScript的模組化開發及載入機制。與jQuery等JavaScript架構不同,SeaJS不會擴充封裝語言特性,而只是實現JavaScript的模組化及按模組載入。SeaJS的主要目的是令JavaScript開發模組化並可以輕鬆愉悅進行載入,將前端工程師從繁重的JavaScript檔案及對象依賴處理中解放出來,可以專註於代碼本身的邏輯。SeaJS可以與jQuery這類架構完美整合。使用SeaJS可以提高JavaScript代碼的可讀性和清晰度,解決目前JavaScript編程中普遍存在的依賴關係混亂和代碼糾纏等問題,方便代碼的編寫和維護。”

1.下載seaJs

下載url:https://github.com/seajs/seajs

      


       我們能清楚地看到,docs是文檔;dist是壓縮好的、用於瀏覽器端的SeaJS代碼;src則是原始碼。package.json + Gruntfile.js就是Grunt構建工具所需要的檔案,用來合并壓縮等等。


看完代碼結構,現在就開始說一下裡面的基本用法。

 2.seaJs的基本用法2.1 用seajs.config來進行路徑和檔案依賴的配置。

譬如:

        

seajs.config({  // 別名配置  alias: {    'es5-safe': 'gallery/es5-safe/0.9.3/es5-safe',    'json': 'gallery/json/1.0.2/json',    'jquery': 'jquery/jquery/1.10.1/jquery'  },  // 路徑配置  paths: {    'gallery': 'https://a.alipayobjects.com/gallery'  },  // 變數配置  vars: {    'locale': 'zh-cn'  },  // 映射配置  map: [    ['http://example.com/js/app/', 'http://localhost/js/app/']  ],  // 預先載入項  preload: [    Function.prototype.bind ? '' : 'es5-safe',    this.JSON ? '' : 'json'  ],  // 偵錯模式  debug: true,  // Sea.js 的基礎路徑  base: 'http://example.com/path/to/base/',  // 檔案編碼  charset: 'utf-8'});

更加詳細的配置 ,可以參考:https://github.com/seajs/seajs/issues/262


2.2 用seajs.use在頁面中載入一個或多個模組,callback 參數可選,省略時,表示無需回調。

繼續看代碼:

// 載入模組 common,並在載入完成時,執行指定回調seajs.use('./common', function(main) {  common.init();});// // 並發載入模組 x 和模組 y,並在都載入完成時,執行指定回調seajs.use(['./x', './y'], function(x, y) {  x.init();  y.init();});

2.3 用define定義模組和擷取模組。

具體調用如下:

define(function(require, exports, module) {  // 你要寫的模組代碼});

2.4用 require 擷取指定模組的介面。

define(function(require) {  // 擷取模組 x 的介面  var x = require('./x');  // 調用模組 x 的方法  x.doSomething();});

2.5 用require.async在模組內部非同步載入一個或多個模組。

define(function(require) {  // 非同步載入一個模組,在載入完成時,執行回調  require.async('./b', function(b) {    b.doSomething();  });  // 非同步載入多個模組,在載入完成時,執行回調  require.async(['./c', './d'], function(c, d) {    c.doSomething();    d.doSomething();  });});
ps:此段代碼copy自官網參考文檔。


2.6用exports在模組內部對外提供介面。

define(function(require, exports) {  //這一句對外提供了一個屬性todo  exports.todo = 'wt';});


3.注意和規範

膚淺地過了一遍基本的用法之後,接下來就說一下要注意的東西了。

3.1模組工廠構造方法的第一個參數 必須 命名為 require 。
// 錯誤!define(function(req) {  // ...});// 錯誤!define(function(r) {  // ...});// 正確!define(function(require) {  // ...});

3.2不要給  require 重新賦值或者不能把這個函數重新命名。

// 錯誤var yilai = require, a= yilai ("./mod");// 錯誤require = function() {};// 錯誤function todo(require) {}// 錯誤function todo() {  var require = function() {};}

3.3require 的參數值不能是字串直接量之外的其他變數。

// 錯誤!require(todo);// 錯誤!require("to-" + "do");// 錯誤!require("todo".toLowerCase());

總結:使用 Sea.js,提高代碼的可維護性,高效性,靈活性,粒子性和可移植性。總結得有點虛,但是seaJs確實給項目的開發帶來了很多的便利。還不用seaJs,你就凹凸慢了。

註:此 文章參考了官網的很多文章,編寫而來。想知道得更多的童鞋,請點擊這裡:http://seajs.org/docs/#docs




Author: Alone
Antroduction: 進階前端開發工程師
Sign: 人生沒有失敗,只有沒到的成功。


博主相關文章推薦:


有趣的前端題目,看了不後悔

移動端前端開發概述

淺談 標籤的語義化

淺談滑鼠滾輪事件

不積跬步無以至千裡----高度自適應的textarea

sass和less,優秀的前端樣式前置處理器

視差滾動的那些事兒
關於那些常見的坑爹的小bug



輕輕談一下seaJs——模組化開發的利器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.