什么是FIS?
- 可以自动编译less,sass为css
- 文件合并
- 文件压缩
- 语法检查
- 监听文件变化
什么是CommonJS?
根据CommonJS规范,一个单独的文件就是一个模块。加载模块使用require方法,该方法读取一个文件并执行,最后返回文件内部的exports对象。可以理解为CommonJS是一种规范,是用在服务器端的,NodeJS是这种规范的实现。CommonJS API定义很多普通应用程序(主要指非浏览器的应用)使用的API,从而填补了这个空白。
开发者可以使用CommonJS API编写应用程序,然后这些应用可以运行在不同的JavaScript解释器和不同的主机环境中:
①服务器端JavaScript应用程序
②命令行工具
③图形界面应用程序
④混合应用程序(如,Titanium或Adobe AIR))
什么是模块
- DuoJS
- RequireJS
- Sea.js
- ReactJS
- AngularJS
浏览器本身并不提供模块管理的机制,为了调用各个模块,有时不得不在网页中,加入一大堆script标签。这样就使得网页体积臃肿,难以维护,还产生大量的HTTP请求,拖慢显示速度,影响用户体验。
为了解决这个问题,前端的模块管理器(package management)应运而生。它可以轻松管理各种JavaScript脚本的依赖关系,自动加载各个模块,使得网页结构清晰合理。不夸张地说,将来所有的前端JavaScript项目,应该都会采用这种方式开发。
最早也是最有名的前端模块管理器,非RequireJS莫属。它采用AMD格式,异步加载各种模块。具体的用法,可以参考我写的教程。Require.js的问题在于各种参数设置过于繁琐,不容易学习,很难完全掌握。而且,实际应用中,往往还需要在服务器端,将所有模块合并后,再统一加载,这多出了很多工作量。
模块管理器
- AMD
- CMD
- Browserify
- Bower
- Component
- NPM
NPM是nodejs官方未nodejs定制的一个工具,是Node.js的包管理器,是Node Packaged Modules的简称,通过npm可以下载安装nodejs的模块包,nodejs有很多优秀的模块包可以让开发这快速开发。是为了帮助Node解决依赖包的安装问题
NPM属于Node模块的管理器。而spm和bower、Component是前端模块管理,作为一个静态资源共享平台,用来发布和共享前端模块
AMD、CMD是用在浏览器端的,异步的,如RequireJS 和SeaJS
AMD((Asynchromous Module Definition) 是 RequireJS 在推广过程中对模块定义的规范化产出
CMD是SeaJS 在推广过程中对模块定义的规范化产出
CMD和AMD的区别有以下几点:
①对于依赖的模块AMD是提前执行,CMD是延迟执行。不过RequireJS从2.0开始,也改成可以延迟执行(根据写法不同,处理方式不通过)
②CMD推崇依赖就近,AMD推崇依赖前置。
③AMD的api默认是一个当多个用,CMD严格的区分推崇职责单一。例如:AMD里require分全局的和局部的。CMD里面没有全局的 require,提供 seajs.use()来实现模块系统的加载启动。CMD里每个API都简单纯粹。
Browserify 是目前最常用的 CommonJS 格式转换的工具。Browserify本身不是模块管理器,只是让服务器端的CommonJS格式的模块可以运行在浏览器端。这意味着通过它,我们可以使用Node.js的npm模块管理器。所以,实际上,它等于间接为浏览器提供了npm的功能
spm和bower、component都是针对前端模块化共享而提供的解决方案
最后
- Browserify和Webpack属于同一类型技术
- GIT和SVN 属于同一类型技术
- AMD CMD Bower Component NPM属于同一类型技术
- CommonJS 是一种规范 AngularJS RequireJS ReactJS SeaJS是基于这种规范上应运而生的框架