CommonJS: 模块加载是同步
暴露模块 => module.exports = value
=> exports.xxx = value
暴露的本质都是exports这个对象
引入模块 require(xxx)
=> 第三方模块: xxx为模块名
=> 自定义模块: xxx为模块文件路径
实现: 服务器端实现 => node.js
浏览器端实现 => browserify(也称为commonJS的浏览器端的打包工具)把require语句转换成浏览器认识的语句
AMD:专门用于浏览器端,模块加载是异步的
定义暴露模块:define(function(){ return 模块 }) //定义没有依赖的模块
define(['module1','module2'],function(m1,m2){ return 模块 }) //定义有依赖的模块
引入使用模块:requirejs(['module1','module2'],function(m1,m2){ 使用m1/m2 })
main.js用到的是:requirejs(['module1','module2'],function(m1,m2){ 使用m1/m2 })
模块名需要提前配置:require.config({
baseUrl: 'js/',
paths: {
module1 : './modules/dataService', // 配置模块名module1
}
})
最终页面引入时:<script data-main="js/main.js" src="js/libs/require.js"></script>
ES6模块规范:依赖模块需要编译打包处理 babel把es6转换成es5,再由browserify打包编译
npm install babel-cli(命令行接口) browserify -g
npm install babel-preset-es2015 --save-dev
定义.babelrc文件 {"presets":["es2015"]} 转换es6
导出模块: export
常规暴露(分别暴露,同一暴露): export function () {}; //可以写多次
默认暴露: export default value //暴露什么数据就接受什么数据,只能写一次
引入模块: import
常规引入:import {xxx} from '路径';
默认引入:import module from '路径';
引入第三方:import $ from 'jquery';