commonjs
什麼是CommonJS
JavaScript是一種強大的面嚮物件語言,它有很多快速高效的直譯器。官方JavaScript標準定義的API是為了構建基於瀏覽器的應用程式。然而,並沒有定義一個用於更廣泛的應用程式的標準庫。CommonJS API定義了很多普通應用程式(主要指非瀏覽器的應用)使用的API,從而填補了這個空白。它的終極目標是提供一個類似Python,Ruby和Java的標準庫。這樣的話,開發者可以使用CommonJS API編寫應用程式,然後這些應用可以執行在不同的JavaScript直譯器和不同的主機環境中。在相容 CommonJS 的系統中,你可以使用JavaScript開發伺服器端JavaScript應用程式、命令列工具、圖形介面應用程式和Hybrid混合應用程式。
CommonJS與NodeJS的關係
CommonJS是一種規範,NodeJS是這種規範的實現。
以下的例子很好的說明了它們之間的關係:
CommonJS Modules
CommonJS Modules是有關如何實現模組化的定義,使得API可以通過模組化的系統協同工作。
- 在一個module中,有一個全域性function變數“require”,require函式接受一個module identifier引數,然後返回一個外部module匯出的API。外部module準備好一個exports物件,require函式返回這個exports物件,可以向exports物件中新增API。如果請求的module無法返回時,require函式將丟擲error。
如果出現依賴閉環(dependency cycle),那麼外部模組在被它的傳遞依賴(transitive dependencies)所require的時候可能並沒有執行完成;在這種情況下,"require"返回的物件必須至少包含此外部模組在呼叫require函式(會進入當前模組執行環境)之前就已經準備完畢的輸出
- 如上所述,在一個module中,也有一個物件變數“exports”。module新增API到該物件中。
- module必須使用exports的形式匯出API。
- module identifier必須是符合小駝峰命名的字串,或以“.”、“..”開頭的相對路徑或絕對路徑,可以沒有檔名字尾.js。
Sample Code
math.js
exports.add = function() {
var sum = 0, i = 0, args = arguments, l = args.length;
while (i < l) {
sum += args[i++];
}
return sum;
};
increment.js
var add = require('math').add;
exports.increment = function(val) {
return add(val, 1);
};
program.js
var inc = require('increment').increment;
var a = 1;
inc(a); // 2
NodeJS中的modu.exports和exports
每一個node.js執行檔案,都自動建立一個module物件,同時,module物件會建立一個叫exports的屬性,初始化的值是 {}。而exports是引用 module.exports的值。module.exports 被改變的時候,exports不會被改變,當模組匯出的時候,真正匯出的執行是module.exports,而不是exports
React Native
在React Native中,所有模組元件檔案可以遵循CommonJS的規範,如果js檔案是通過應用本地bundle載入肯定沒有問題,而如果是通過伺服器獲取js檔案,應該是相關檔案會一次性打包壓縮傳輸到本地。
載入模組:
var React = require('react-native');
var SearchPage = require('./SearchPage');
匯出模組:
module.exports = SearchPage;
相關資料
JavaScript模組化(require函式):
Javascript模組化程式設計(一):模組的寫法
Javascript模組化程式設計(二):AMD規範
Javascript模組化程式設計(三):require.js的用法
相關文章
- commonjs require原理JSUI
- Commonjs規範JS
- node中的CommonJSJS
- CommonJs載入規範JS
- 簡要理解CommonJS規範JS
- AMD , CMD, CommonJS,ES Module,UMDJS
- 前端模組化之CommonJS前端JS
- 深入 CommonJs 與 ES6 ModuleJS
- Commonjs規範與模組化JS
- CommonJS的兩種匯出方式JS
- 深入 CommonJs 與 ES6 ModuleJS
- CommonJs 和 ESModule 的 區別整理JS
- CommonJS模組 和 ECMAScript模組JS
- 讀懂CommonJS的模組載入JS
- 你對CommonJS規範瞭解多少?JS
- 手寫CommonJS 中的 require函式JSUI函式
- 模組化之AMD、CMD、UMD、commonJSJS
- 03_Node js 模組化 CommonJSJS
- js模組 - amd cmd commonjs esm umdJS
- ES Module,commonjs和Typescript模組系統JSTypeScript
- CommonJS、AMD、CMD、ES Module 一文流JS
- 實現 CommonJs 規範中的 Require 模組JSUI
- 前端模組化:CommonJS,AMD,CMD,ES6前端JS
- 前端模組化AMD、CMD、CommonJS&ES6前端JS
- CommonJS,AMD,CMD,ES6,require 和 import 詳解JSUIImport
- ES6與CommonJS中的模組處理JS
- 你真的懂模組化嗎?教你CommonJS實現JS
- 前端模組化:CommonJS,AMD,CMD,ES6(轉載)前端JS
- 前端進階課程之模組化(一)CommonJS規範前端JS
- 騰訊 IVWEB 團隊: fis3 commonJs 中的 moduleIdWebS3JS
- 來來來,探究一下CommonJs的實現原理JS
- ES6模組與commonJS模組的差異JS
- 一覽js模組化:從CommonJS到ES6JS
- 前端技術探秘-Nodejs的CommonJS規範實現原理前端NodeJS
- Node之CommonJS,為什麼模組該這麼寫JS
- ES6 模組化與 CommonJS 模組化區別JS
- 基於CommonJS規範,簡單實現NodeJs模組化NodeJS
- commonJs、AMD、UMD、es6 到底是怎麼用的JS