JavaScript之無題之讓人煩躁的模塊化( 三 )


2、CMD規范與SeaJs由于RequireJs的一些問題,又出現了基于CMD規范的SeaJs,SeaJs和RequireJs有一個最大的不同就是RequireJs希望可以通吃 , 但是SeaJs則更專注于瀏覽器,哦對了,CMD的全稱叫做:Common Module Definition , 即通用模塊規范 。
SeaJs的簡單用法如下:
// 所有模塊都通過 define 來定義define(function(require, exports, module) {// 通過 require 引入依賴var a = require('xxx')var b = require('yyy')// 通過 exports 對外提供接口exports.doSomething = ...// 或者通過 module.exports 提供整個接口module.exports = ...})// a.jsdefine(function(require, exports, module){var name = 'morrain'var age = 18exports.name = nameexports.getAge = () => age})// b.jsdefine(function(require, exports, module){var name = 'lilei'var age = 15var a = require('a.js')console.log(a.name) // 'morrain'console.log(a.getAge()) //18exports.name = nameexports.getAge = () => age})上面的代碼是從網上抄的,大概說明白了基本的使用方法 。我們可以看到 , SeaJs的導入和導出的方式,跟NodeJs好像~~而SeaJs從書寫形式上,更像是CommonJs和AMD的結合 。當然,我只是說書寫形式上 。
而AMD和CMD , RequireJs和SeaJs,都是由社區發起的,并沒有語言層面的規范,包括CommonJs以及NodeJs,所以,這個時代還是一個百花爭艷,沒有統一的時代 , 不過在現在,這些都不重要了 。如果非要我說些什么,那就是,忘記這兩個東西 , 去學下面的重點 。
四、大一統百花爭艷的時代確實有些煩人,這個那個那個這個,又都不被官方認可 , 還好,官方終于還是出手了,ES6的出現,在語言層面上就提出了對于模塊化的規范,也就是ES6 Module 。它太重要了,具體語法我就不多說了,文末的鏈接附上了阮一峰大神的《ES6入門指南》關于ES6 Module的地址 。
所以到了ES6的時候,你要學習的就是ES6 Module,NodeJs也在逐步實現對ES6 Module的支持 。最終,秦始皇會一統天下 , 這是必然的結果 。
這篇文章到這里就結束了,說實話,模塊化的問題和歷史由來已久 , 從萌芽到統一 , 至少十幾年的過程,而市面上也已有大量的文章介紹彼此的區別和各自的特點,我寫來寫去,也不過是復制一遍,毫無意義 。
但是我又想學一下模塊化 , 以及模塊化的歷史,額……,請原諒我的無知,所以才有了這篇文章 , 但是寫著寫著,發現我能表達出來的東西并不多,因為都是故事,都是歷史,并且對于未來的開發好像也沒什么實際的意義和價值 。
所以,在如此糾結的心態下有了這篇文章,原諒我無知又想逼逼的心情吧 。
最后的最后,如果你想學習模塊化,在現階段 , 只需要去深入學習ES6 Module,和學習一下NodeJs的CommonJs,以及了解一下各模塊化的區別即可,因為現在是即將統一 , 還未完全統一的時候 。
參考資料:https://wiki.commonjs.org/wiki/CommonJS
https://github.com/seajs/seajs/issues/242
https://es6.ruanyifeng.com/#docs/module

推薦閱讀