webpack运行在node.js上,所以模块化规范也同node.js 使用的是commonjs规范
commonjs规范内容
一个文件就是一个模块,模块间作用域互不影响
- 模块的定义 module.exports
- 模块的引用 require(‘标识符’)
- 模块标识符
服务端
commonjs规范为同步加载,适用于服务端,在浏览器中js加载会阻塞页面渲染,因此同步不适用
浏览器端
产生了amd(require.js)和cmd(sea.js)规范。
- amd 异步模块定义
- cmd 通用模块定义
两者都是进行异步加载。
amd依赖前置,依赖加载完后立即执行,执行顺序不定,体验好(提前执行完成);
cmd依赖后置,依赖加载完不执行,require时按顺序执行,性能好(不需要的不执行)
webpack打包
webpack打包后的文件,将依赖都打包到同一文件中,通过id作为模块的标识。当文件很大时,webpack借鉴amd对代码进行拆分code splitting,需要用到时再加载进来。
es6中import
import使用bable转换后会变为commonjs的require,这时如果直接放到浏览器中是无法运行的,还需要打包 如上webpack打包(预编译)或使用browserify
- webpack 可以处理一些其它静态资源等
- browserify 处理js包依赖