js模块化是一种开发规范
可以降低代码耦合度,避免命名冲突,按需加载,更好的处理依赖冲突等
CommonJS
http://wiki.commonjs.org/Modules/1.1
每个文件都可以当做一个模块
在服务器端,模块的加载是运行时同步加载的
在浏览器端,模块需要体检编译打包处理
基本语法:
暴露模块: module.exports = value
exports.xxx = value
暴露出来的模块就是exports对象
引入模块: require()
服务器端: 引入node.js
浏览器端: 引入Browserify
官网:http://browserify.org/
首先要npm install browserify -g全局安装
然后 npm install browserify --save -dev 局部安装 这两部都需要执行(-dev表示开发环境所用到,生产模式不用此包)
利用 browserify js文件地址 -o 打包生成后文件存放地址 打包处理js
然后可以在页面通过script标签引入打包后的js文件进行使用
引入第三方库的语句要写在引入自定义模块语句的上面
AMD
专门用于浏览器端,模块的加载是异步的
定义没有依赖的模块:
define(function(){
return 模块
})
定义有依赖的模块
define(['module1', 'module2'], function(m1,m2){
return 模块
})
引入使用模块
require(['module1', 'module2'], function(m1,m2){
使用m1,m2
})
实现:
require.js
网址: http://www.requirejs.cn/
创建项目结构:
/ - js
/ - libs
/ - require.js
/ - modules
/ - 各种自定义的js文件
在此定义暴露
/ - main.js
在此引入各种需要的
(function() {
requires.config({
path:{ //配置路径
模块名: '模块路径', // 不要加.js 默认有
}
})
requirejs(['模块名'], function(m){
使用m
})
}()
/ - index.html
引入require.js并指定js主文件入口
引入main.js即可
CMD
一般只有阿里内部用
也是用于浏览器端,模块异步加载,按需加载
ES6
导出模块:export
引入模块:import
export采用分别暴露时,必须采用结构赋值的形式进行引入
export function foo() {}
export function foo1() {}
import { foo, fun } from ’文件路径'
采用默认暴露
export default {
msg = "..";
.....
}
import 自定义名称 from '...';
自定义名称.msg