requireJS的匿名模块和命名模块的区别和最佳实践
requirejs是一个简单的javascript框架,支持模块化编码和模块的异步载入。
在requireJS中模块能够分为:匿名模块和命名模块这2种。
requireJS定义一个匿名模块
define(function(){
return {id:"noName"};
});
requireJS定义一个命名模块
define("constantModule",[],function(){
return {id:"hasName"};
});
requireJS官网上也说: It is normally best to avoid coding in a name for the module and just let the optimization tool burn in the module names。就是说推荐使用匿名模块。
jquery从1.7版本号開始支持AMD(Asynchronous Module Definition)。而且是一个命名模块,模块名就是jquery。我使用的是jquery-1.11.1.js,源代码例如以下:
if ( typeof define === "function" && define.amd ) {
define( "jquery", [], function() {
return jQuery;
});
}
如今看下使用requireJS框架载入jquery。仅仅要路径是正确的。以下代码是可以正确载入jquery的。
require.config({
baseUrl:"./../",
paths: {
jquery: 'jquery-1.11.1'
}
});
//jquery框架的模块名是jquery,这里不能改动,不然载入不成功
require(["jquery"], function(jq) {
//假设载入成功,应该显示1.11.1
alert(jq().jquery);
});
上面的代码可以正常载入jquery框架之后,我们略微改动下上面的代码
require.config({
baseUrl:"./../",
paths: {
jquery_name: 'jquery-1.11.1'
}
});
//jquery框架的模块名是jquery,这里不能改动,不然载入不成功
require(["jquery_name"], function(jq) {
//假设载入成功,应该显示1.11.1
alert(jq().jquery);
});
能够发现。这次jquery框架不能正常载入。我们不过改变了模块名而已。这里能够得出一个结论:
假设是命名模块,那么使用require载入该模块的时候。模块名一定要正确,不能任意改动。
接下来我们载入自定义的匿名模块和命名模块。验证下我们的结论。
require.config({
baseUrl:"./../",
paths: {
jquery: 'jquery-1.11.1',
hehe: 'require_demo/module_noName',
constantModule: 'require_demo/module_hasName',
}
});
//jquery框架的模块名是jquery,这里不能改动,不然载入不成功
require(["jquery","hehe","constantModule"], function(jq,noName,hasName) {
alert(jq().jquery);
alert(noName.id);
alert(hasName.id);
});
调整文件路径,保证上面的代码可以正常载入。接下来我们可以改动上面的代码
require.config({
baseUrl:"./../",
paths: {
jquery: 'jquery-1.11.1',
xx: 'require_demo/module_noName',
constantModule_hehe: 'require_demo/module_hasName',
}
});
//jquery框架的模块名是jquery,这里不能改动,不然载入不成功
require(["jquery","xx","constantModule_hehe"], function(jq,noName,hasName) {
alert(jq().jquery);
alert(noName.id);
alert(hasName.id);
});
能够发现:xx模块能够正常载入,constantModule_hehe不能正常载入。
我们能够看到:匿名模块具有更大的灵活性。载入匿名模块的时候,名称能够任意指定。
requireJS的匿名模块和命名模块的区别和最佳实践的更多相关文章
- shell 匿名管道和命名管道
管道的特点:如果管道中没有数据,那么取管道数据的操作就会滞留,直到管道内进入数据,然后读出后才会终止这一操作:同理,写入管道的操作如果没有读取管道的操作,这一动作也会滞留. 1,匿名管道 匿名管道使用 ...
- 使用RequireJS并实现一个自己的模块加载器 (一)
RequireJS & SeaJS 在 模块化开发 开发以前,都是直接在页面上引入 script 标签来引用脚本的,当项目变得比较复杂,就会带来很多问题. JS项目中的依赖只有通过引入JS的顺 ...
- 使用RequireJS并实现一个自己的模块加载器 (二)
2017 新年好 ! 新年第一天对我来说真是悲伤 ,早上兴冲冲地爬起来背着书包跑去实验室,结果今天大家都休息 .回宿舍的时候发现书包湿了,原来盒子装的牛奶盖子松了,泼了一书包,电脑风扇口和USB口都进 ...
- seajs模块标识命名和解析规则
模块标识采用路径形式,但要注意与路径的区别.require.require.async的第一个参数是模块标识.而seajs.use第一个参数为文件路径. use是全局的,require是局部的.模块标 ...
- Python下OS模块重命名方法renames
在python中有很多强大的模块,其中我们经常要使用的就是OS模块,OS模块提供了超过200个方法来供我们使用,并且这些方法都是和数据处理相关的,这里介绍下重命名这个方法. OS的重命名方法是os.r ...
- requireJS使用shim注入非标准模块详解
在javascript中定义全局变量有2种方式,本质上是等价的,都是向window对象注入属性或者方法. // global.js var g_name = "aty"; wind ...
- Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块
Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fab ...
- Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块
Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函 ...
- NodeJS模块和ES6模块系统语法及注意点
社区模块规范: 1.CommonJS规范 规范实现者: NodeJS 服务端 Browserify 浏览器 2.AMD规范 全称 异步模块定义 规范实现者: RequireJS 浏览器 3.CMD规范 ...
随机推荐
- unity linear work flow
看了下unity linear space的工作流 srgb read tex deferred gbuffer01 srgb rt float rt----pps float rt 最后 blit ...
- es安装脚本
#!/bin/bash file_name="/sdzw/es5/conf/es.config" #安装目录 install_dir="/es5/esinstall&qu ...
- Java 8 Stream 教程
Java 8 Stream Tutorial 本文采用实例驱动的方式,对JAVA8的stream API进行一个深入的介绍.虽然JAVA8中的stream API与JAVA I/O中的InputStr ...
- Uber 四年时间增长近 40 倍,背后架构揭秘
据报道,Uber 仅在过去4年的时间里,业务就激增了 38 倍.Uber 首席系统架构师 Matt Ranney 在一个非常有趣和详细的访谈<可扩展的 Uber 实时市场平台>中告诉我们 ...
- 【MVC+MySQL+EntityFramework】查询性能优化笔记
通过在DbContext中定了表之间的关系,查询后在View中通过item.ProjectOverHour来显示关联表数据. modelBuilder.Entity<ProjectOverHou ...
- TP框架模板中默认值输出
TP框架模板中默认值输出 我们可以给变量输出提供默认值,例如: {$user.nickname|default="这家伙很懒,什么也没留下"} 对系统变量依然可以支持默认值输出,例 ...
- Linux启动apache失败怎么办
(20014)Internal error (specific information not available): AH00058: Error retrieving pid file logs/ ...
- js实现全选,全不选,反选
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- jrebel 7免费激活(非破解) 和 IntelliJ Idea 2017 免费激活方法
转自http://www.cnblogs.com/suiyueqiannian/p/6734412.html http://www.cnblogs.com/suiyueqiannian/p/67540 ...
- 2013夏,iDempiere来了 - v1.0c Installers (Devina LTS Release) 2013-06-27
怀揣着为中小企业量身定做一整套开源软件解决方案的梦想开始了一个网站的搭建.http://osssme.org/ iDempiere来了 - v1.0c Installers (Devina LTS R ...