Common.js 的工作原理
common.js本身是node中的模块管理方式,但是浏览器本身不支持commonjs。
一、原理
common.js无法在浏览器运行的原因是因为浏览器中缺少require,exports,module,global这几个node中的全局环境变量。
只要拥有了这几个变量,在浏览器中依然可以使用该管理方式。
demo
var module = {
exports:{}
};
(function(module,module.exports){
exports.mutlply = function(n){return n*1000}
})(module,module.exports)
var f = module.exports.mutiply
f(10) // 10000
上述代码通过一个立即执行函数将一个模块放到exports中去(注意是同步的放置进去)。
二、Browserify 的实现
Browserify是目前最为流行的commonjs的格式转换库,目的就是能够让前端能够像node后端一样去实现require加载模块。
Browerify 加工之后的结果就是,它将所有的模块放置在一个list中,然后该list中的每一项都是一个模块,代码直接放在该项中。
$ browser-unpack < compiled.js
[
{
"id":1,
"source":"module.exports = function(x) {\n console.log(x);\n};",
"deps":{}
},
{
"id":2,
"source":"var foo = require(\"./foo\");\nfoo(\"Hi\");",
"deps":{"./foo":1},
"entry":true
}
]
(over)