Require.js用法

本文详细介绍了Require.js的使用方法,包括如何载入、定义和调用模块,以及复杂的配置文件示例。深入探讨了AMD规范下的模块依赖管理和非AMD规范库的整合策略。

载入Require.js

<script src="js/require.js" data-main="js/main"></script>

定义模块

//普通模块
define(function() {
	return {
	    method1: function() {},
		method2: function() {},
    };
});

//依赖其他模块
define(['module1', 'module2'], function(m1, m2) {
    return {
        method: function() {
            m1.methodA();
			m2.methodB();
        }
    };
});

//依赖非常多模块简写
define(function (require) {
	var dep1 = require('dep1'),
		dep2 = require('dep2'),
		dep3 = require('dep3'),
		dep4 = require('dep4'),
		dep5 = require('dep5'),
		dep6 = require('dep6'),
		dep7 = require('dep7'),
		dep8 = require('dep8');
});

//根据条件判断加载依赖
define(('__proto__' in {} ? ['zepto'] : ['jquery']), function($) {
    return $;
});

调用模块

//普通调用
require(['foo', 'bar'], function(foo, bar) {
        foo.doSomething();
});

//根据条件判断调用
require( [ window.JSON ? undefined : 'util/json2' ], function (JSON) {
  JSON = JSON || window.JSON;

  console.log( JSON.parse( '{ "JSON" : "HERE" }' ) );
});

配置config

require.config({
	baseUrl: 'js', //本地模块位置的基准目录
	map: { //"map"告诉RequireJS在任何模块之前,都先载入这个模块
        '*': {
            css: 'lib/css' //此模块用来加载css文件
        }
    },
    paths: { //模块路径设置
        jquery: [ //同一个模块可以设置多个路径,如果第一路径加载失败会继续加载第二个路径
            'https://cdn.bootcss.com/jquery/3.4.0/jquery.min.js',
            'lib/jquery'
        ],
        backbone: 'lib/backbone',
        underscore: 'lib/underscore',
        demo: 'lib/demo'
    },
    shim: { //非AMD规范的库
        backbone: {
            deps: [ 'underscore' ], //依赖
            exports: 'Backbone' //输出
        },
        underscore: {
            exports: '_' //输出
        },
        demo: ['css!lib/shim/demo.css'] //此模块依赖的css
    }
});

项目中公用配置config文件示例

Project
├── index.html

├── css 样式
│ └── index.css

└── js
 ├── app 业务模块
 │ └── index.js
 │
 ├── lib 模块库
 │ ├── shim 非AMD规范的库
 │ │ ├── modal.css
 │ │ └── modal.js
 │ │
 │ ├── common.js
 │ ├── css.js
 │ └── jquery-3.2.1.min.js
 │
 ├── require.js
 └── requireConfig.js

index.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
		<title>项目中公用配置config文件示例</title>
		<link rel="stylesheet" href="css/index.css" />
	</head>
	<body>
		<header></header>
		
		<main >
			<button id="modalBtn">点击弹出内容</button>
		</main>
		
		<footer></footer>
		
		<script src="js/require.js" data-main="js/app/index"></script>
	</body>
</html>

requireConfig.js

require.config({
	baseUrl: 'js', 
	map: { //"map"告诉RequireJS在任何模块之前,都先载入这里的模块
        '*': {
            css: 'lib/css', //此模块用来加载css文件
            common: 'lib/common' //所有页面默认需要加载的模块
        }
    },
    paths: {
        jquery: 'lib/jquery-3.2.1.min',
        modal: 'lib/shim/modal'
    },
    shim: {
    	modal: {
    		deps: [ 'css!lib/shim/demo.css' ], //依赖
            exports: 'modal' //输出
        }
    }
});
//require(['common']); //也可以在这里设置所有页面默认需要加载的模块

index.js

require(['../requireConfig'], function() { //载入配置文件

	require(['jquery', 'modal'], function($, modal) {
		$('#modalBtn').click(function(){
			modal('我是弹出框的内容');
		});
	});
	
});

另附一份复杂的配置文件参考

require.config({
    baseUrl: 'js', //以页面为基础
    map: { //"map"告诉RequireJS在任何模块之前,都先载入这个模块
        '*': {
            css: 'lib/css'
        }
    },
    paths: {
        jquery: 'lib/jquery-1.8.3.min',
        template: 'lib/template',
        tabFrame: 'lib/tabFrame',
        'jquery.bootstrapTable': 'lib/shim/bootstrap-table/src/bootstrap-table',
        'jquery.bootstrapTableLang': 'lib/shim/bootstrap-table/src/bootstrap-table-zh-CN.min',
        tooltip: 'lib/shim/bootstrap/tooltip',
        popover: 'lib/shim/bootstrap/popover',
        easyDropDown: 'lib/shim/easydropdown/jquery.easydropdown.min',
        imeiFilter: 'lib/imeiFilter',
        mock: 'http://mockjs.com/dist/mock',
        simplPagination: 'lib/shim/simplPagination/jquery.simplePagination',
        hashMap: 'lib/shim/hashMap',
        layer: 'lib/shim/layer/layer',
        moment: 'lib/moment',
        dateUtil: 'lib/dateUtil',
        'qrcode': 'lib/shim/qrcode/qrcode',
        'jquery.qrcode': 'lib/shim/qrcode/jquery.qrcode',
        util: 'lib/util'

    },
    shim: {
        'jquery.bootstrapTable': {
            deps: [
                'css!lib/shim/bootstrap-table/src/bootstrap-table.css',
                'jquery'
            ]
        },
        'jquery.bootstrapTableLang': ['jquery', 'jquery.bootstrapTable'],
        'jquery.qrcode': ['qrcode', 'jquery'],
        tooltip: ['jquery'],
        popover: ['tooltip'],
        easyDropDown: ['css!lib/shim/easyDropDown/easydropdown.css', 'css!lib/shim/easyDropDown/easydropdown-customize.css', 'jquery'],
        simplPagination: ['css!lib/shim/simplPagination/simplePagination.css', 'css!lib/shim/simplPagination/simplePagination-customize.css', 'hashMap', 'jquery'],
        layer: ['css!lib/shim/layer/theme/default/layer.css', 'jquery']
    },
});
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值