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可以通过模块化的系统协同工作。

  1. 在一个module中,有一个全局function变量“require”,require函数接受一个module identifier参数,然后返回一个外部module导出的API。外部module准备好一个exports对象,require函数返回这个exports对象,可以向exports对象中添加API。如果请求的module无法返回时,require函数将抛出error。

如果出现依赖闭环(dependency cycle),那么外部模块在被它的传递依赖(transitive dependencies)所require的时候可能并没有执行完成;在这种情况下,"require"返回的对象必须至少包含此外部模块在调用require函数(会进入当前模块执行环境)之前就已经准备完毕的输出

  1. 如上所述,在一个module中,也有一个对象变量“exports”。module添加API到该对象中。
  2. module必须使用exports的形式导出API。
  3. 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;

相关资料

CommonJS官网

JavaScript模块化(require函数):
Javascript模块化编程(一):模块的写法
Javascript模块化编程(二):AMD规范
Javascript模块化编程(三):require.js的用法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容