define

javascript 在浏览器端是没有模块概念的, 为什么 require 中有呢?因为 require 中的模块是使用 define 来模拟的, define 是一个全局函数。

使用 define 定义一个简单的模块

// first_module.js:
define(function(){
	function main(){
		alert("hello world");
	}
	return main;
});

如果定义的模块依赖其它模块, 则可以提前加载该模块

// a.js  定义一个模块
define(function(){
	return function(){
		alert("hello world");
	};
});

// b.js 依赖 a 模块
define(["a"],function(a){
	return a;
});

我们要遵循一个模块对应一个 js 文件, 后期可以使用工具将多个模块合并为一个文件, 不用担心加载过多的模块而相应加载了很多 js 文件

喜欢 CommonJS 的可以使用依赖注入的形式把 require, exports, module 三个模块构造出来, 在内部使用 require 形式加载, 如果需要依赖多个模块得前置加载
define(["require","exports","module","模块 ID"],function(require, exports, module) {
    
    var app = require("模块 ID");

    exports.foo = function () {
        return app;
    };
});

commonjs 规范

require 加载模块
exports 返回模块接口
module  该模块的相信信息, exports 仅仅是 module.exports 的一个引用, 可以单独对 修改 module.exports 对象, 也能实现操作 exports 一样的效果。