npm
是node的包管理系统,通过package.json
声明模块间的依赖关系。然而node采用CommonJS
规范组织的模块在浏览器中无法直接使用。bower是前端资源的包管理系统,通过bower.json
来组织js、css和图标资源。bower管理的js包,一般采用全局变量模式,或者requirejs推崇的AMD规范,亦或UMD。
UMD(通用模块定义)
由于现行的javascript版本中,没有原生的依赖管理实现,而随着前端和Nodejs的越来越流行,javascript的代码量越来越大,于是对依赖管理和包管理的需求越来越高,于是社区就出现了CommonJS和AMD两大依赖管理的阵营。目前CommonJS规范是Nodejs的内置支持,主要用于后端js。AMD被requirejs支持,是一种前端依赖管理的选择。
全局变量
// MyDependency is in your global scope
var MyModule = function() {};
CommonJS,Nodejs支持的规范
var MyDependency = require('my-dependency');
module.exports = function() {};
define(['my-dependency'], function(MyDependency) {
return function() {};
});
UMD,兼容所有规范
(function (root, factory) {
if (typeof exports === 'object') {
// CommonJS
module.exports = factory(require('b'));
} else if (typeof define === 'function' && define.amd) {
// AMD
define(['b'], function (b) {
return (root.returnExportsGlobal = factory(b));
});
} else {
// Global Variables
root.returnExportsGlobal = factory(root.b);
}
}(this, function (b) {
// Your actual module
return {};
}));
继续阅读 →