Open 7986LiChang opened 7 years ago
原因: npm的模块都是javascript写的,但浏览器用不了,因为在浏览器端不支持CommonJS格式,只在服务器端基于Node使用CommonJS
var module = {
exports: {}
};
(function(module, exports) { exports.multiply = function (n) { return n * 1000 }; }(module, module.exports))
var f = module.exports.multiply; f(5) // 5000
- browserify 是目前最常用的CommonJS格式转换工具,但不能在浏览器中操作
1. CommonJS/AMD/CMD
node 编程中最重要的思想是模块化。而在node模块中,采用CommonJS规范,使用module.exports导出接口,使用require引入模块。 在服务器端,node的module遵循CommonJS规范 在浏览器端,出现require.js/sea.js工具包。requirejs遵循AMD,seajs遵循CMD。 虽然有不同,但还是希望能保持比较统一的代码风格。
2. ES6中的module
ES6发布的module没有直接采用CommonJS,甚至没有采用require。 因此,require仍然是node的一个私有全局方法,module.exports是node私有的全局变量属性
3. 模块化编程 require.js库
在html中可以引入多个js文件,并按照顺序依次加载。因此,可以在a.js文件中引用b.js文件中的变量,但前提时:b.js先与a.js加载,保证b加载完成后其中变量才可使用。 例如:
这段代码将依次加载多个js文件。但是,这种写法在js文件较少时还能使用,一旦js文件过多,就会出现这样的问题:
因此,require.js诞生就是为了解决上述问题: