javascript模块化详解2AMD-CMD-ES6

一、AMD规范

异步, 用于浏览器端,依赖require.js

1、基本语法

暴露模块:

// 定义没有依赖的模块
define(function(){
    return 模块
})

// 定义有依赖的模块
define(['module1','module2'],function(m1,m2){
    return 模块
})

引入使用模块:

requirejs(['module1','module2'],function(m1,m2){
    使用m1/m2
})

代码演示:

// 无依赖模块 dataService.js
define(function(){
    let name = 'dataService.js'
    function getName() {
        return name
    }
    return {
        getName
    }
})
// 有依赖的模块 alerter.js
define(['dataService','jquery'],function(dataService,$){
    let msg = 'alerter.js'
    function showMsg() {
        $('body').css('color','red')
        console.log(msg, dataService.getName())
    }
    return {
        showMsg
    }
})
// 主模块 main.js
(function(){
    // 配置引用路径
    requirejs.config({
        baseUrl:'./',
        paths:{
            dataService:'./dataService',
            alerter:'./alerter',
            jquery:'./lib/jquery', // 第三方库
            angular:'./lib/angular'
        },
        // angular不支持amd暴露,因此需要配置,将angular对象暴露出来
        shim:{
            angular:{
                exports:'angular'
            }
        }
    })
    // 引用模块 无需再暴露用requirejs
    requirejs(['alerter'],function(alerter){
        alerter.showMsg()
    })
})();

注意jquery插件最后,自定义了模块,因此模块名称必须是jquery

<!-- 主页面 index.html -->
<body>
    <script data-main="./app.js" src="require.js"></script>
</body>

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理