requirejs.config配置paths的时候,配置目录和配置文件的区别

假设我们的项目结构如下:

index.html
main.js
libs
	--haha.js
	--cores
		--cores1.js
		--core2.js
	--utils
		--util1.js
		--util2.js
	--services
		--service1.js
		--service2.js 

如果项目规模比较大,那么js文件将会非常多,通常我们会按照目录进行组织和分组。在上面的代码中如果我们想使用core1.js、core2.js、util1.js、util2.js、service1.js、service2.js这6个模块。那么我可以在main.js中做如下配置:

requirejs.config({
    baseUrl: 'libs',
    paths: {
        "core1": 'cores/core1',
        "core2": 'cores/core2',
        "util1": 'utils/util1',
        "util2": 'utils/util2',
        "service1": 'services/service1',
        "service2": 'services/service2',
    }
});

require(["core1","core2","util1","util2","service1","service2"], function() {

	var core1 = require("core1");
	var core2 = require("core2");
	var util1 = require("util1");
	var util2 = require("util2");
	var service1 = require("service1");
	var service2 = require("service2");

});

通过在paths中配置每个一个模块的模块id和文件路径的映射关系,requirejs能够正确的加载我们需要的模块。当js文件非常多的时候,这种配置方式显然非常繁琐,配置的工作量会非常大。

我们也可以使用下面配置目录的方式,来加载需要的模块。

requirejs.config({
    baseUrl: 'libs',
    paths: {
        "cores": 'cores',
        "utils": 'utils',
        "services": 'services'
    }
});

require(["cores/core1","cores/core2","utils/util1","utils/util2","services/service1","services/service2"], function() {

	var core1 = require("cores/core1");
	var core2 = require("cores/core2");
	var util1 = require("utils/util1");
	var util2 = require("utils/util2");
	var service1 = require("services/service1");
	var service2 = require("services/service2");

});

可以看到通过这种配置目录的方式,能够大大减少paths中配置项的数量。假如我们的core2.js依赖于模块util1.js,使用配置文件和配置目录的方式,core2.js代码如下:

//在main.js中配置了文件,要求一定要配置util1到模块文件的映射
define(["util1"],function(util) {  

	return {name:"haha:"+util.name};

});  

//在main.js中配置了目录,只需配置utils目录的映射即可
define(["utils/util1"],function(util) {
	return {name:"haha:"+util.name};
}); 

可以看到配置目录的好处在于:不需要在main.js中配置每一个模块id和模块js文件的映射关系,能够减少main.js中配置的数量。配置文件的好处在于:模块id更加简单,"core1"显然比"cores/core1"更加简短。

再看下面这段代码,如果将"cores/core1"当做是一个模块的名字,那么下面代码加载的将是haha.js;如果将"cores/core1"当成是目录+文件名,那么加载的将是core1.js。那requirejs加载的到底是哪儿一个js呢?

requirejs.config({
    baseUrl: 'libs',
    paths: {
        "cores": 'cores',
        "utils": 'utils',
        "services": 'services',
	"cores/core1":"haha"
    }
});

require(["cores/core1","cores/core2","utils/util1","utils/util2","services/service1","services/service2"], function() {

	var core1 = require("cores/core1");
	alert(core1.name);

});

很容易验证:"cores/core1"被当成是一个模块的名字,加载的是haha.js而不是core1.js。

现在我们可以总结下,requirejs是如何加载"path/module"这种格式的模块了。

1.首先看requirejs.config()中paths是否配置了"path/module"这个配置项。如果配置了,"path/module"会被认为是一个普通的模块名。如果没有配置,那么执行第二步。

2.将"path/module"看成是文件系统上的路径,通过目录和文件名来确定需要加载的模块。如果仍然没有找到,那么requirejs会报错。

时间: 2024-11-03 22:29:56

requirejs.config配置paths的时候,配置目录和配置文件的区别的相关文章

iis7 发布mvc3 遇到的HTTP错误 403.14-Forbidden Web 服务器被配置为不列出此目录的内容及Login on failed for "IIS APPPOOL\ASP.NET v4.0"问题

问题1: 发布mvc3报错:403.14-Forbidden Web 服务器被配置为不列出此目录的内容 折腾了半天,提示里面的解决方法是: 如果不希望启用目录浏览,请确保配置了默认文档并且该文件存在. 使用 IIS 管理器启用目录浏览. 打开 IIS 管理器. 在“功能”视图中,双击“目录浏览”. 在“目录浏览”页上,在“操作”窗格中单击“启用”. 确认站点或应用程序配置文件中的 configuration/system.webServer/[email protected] 特性被设置为 Tr

vs2015启动网站调试提示 HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容。 解决方法

今天安装了vs2015 下载一个项目进行试用,启动调试的时候提示 HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容. 最可能的原因: 没有为请求的 URL 配置默认文档,并且没有在服务器上启用目录浏览. 可尝试的操作: 如果不希望启用目录浏览,请确保配置了默认文档并且该文件存在. 启用目录浏览. 转到 IIS Express 安装目录. 运行appcmd set config /section:system.webServer/directoryBr

403.14-Forbidden Web 服务器被配置为不列出此目录的内容

iis 7上发布mvc报错:403.14-Forbidden Web 服务器被配置为不列出此目录的内容 折腾了半天,提示里面的解决方法是: 如果不希望启用目录浏览,请确保配置了默认文档并且该文件存在. 使用 IIS 管理器启用目录浏览. 打开 IIS 管理器. 在“功能”视图中,双击“目录浏览”. 在“目录浏览”页上,在“操作”窗格中单击“启用”. 确认站点或应用程序配置文件中的 configuration/system.webServer/[email protected] 特性被设置为 Tr

iis7 发布mvc 遇到的HTTP错误 403.14-Forbidden Web 服务器被配置为不列出此目录的内容

iis 7上发布mvc报错:403.14-Forbidden Web 服务器被配置为不列出此目录的内容 提示里面的解决方法是: 如果不希望启用目录浏览,请确保配置了默认文档并且该文件存在. 使用 IIS 管理器启用目录浏览. 打开 IIS 管理器. 在“功能”视图中,双击“目录浏览”. 在“目录浏览”页上,在“操作”窗格中单击“启用”. 确认站点或应用程序配置文件中的 configuration/system.webServer/[email protected] 特性被设置为 True. 按照

Detailed Error Information: Module IIS Web Core Notification 未知 Handler 尚未确定 Error Code 0x80070032 配置错误 无法读取配置节“spring”,因为它缺少节声明 配置文件 \\?\d:\用户目录\我的文档\visual studio 2015\Projects\LiS

Detailed Error Information: Module    IIS Web Core Notification    未知 Handler    尚未确定 Error Code    0x80070032 配置错误    无法读取配置节“spring”,因为它缺少节声明 配置文件    \\?\d:\用户目录\我的文档\visual studio 2015\Projects\LiShu\LiShu.WebApp\web.config 没有加载sping 的dll文件

SpringCloud系列九:SpringCloudConfig 基础配置(SpringCloudConfig 的基本概念、配置 SpringCloudConfig 服务端、抓取配置文件信息、客户端使用 SpringCloudConfig 进行配置、单仓库目录匹配、应用仓库自动选择、仓库匹配模式)

1.概念:SpringCloudConfig 基础配置 2.具体内容 通过名词就可以发现,SpringCloudConfig 核心作用一定就在于进行配置文件的管理上.也就是说为了更好的进行所有微服务的配置项的管理,在 SpringCloud 设计架构里面就考虑到了针对于所有的核心配置文件(application.yml)进行的一项统一管理的工具. 2.1.SpringCloudConfig 的基本概念 现在可以思考一个问题:在一个实际的项目开发过程之中,有可能会出现有上百个微服务(创建微服务的标

IIS7错误:“Web服务器被配置为不列出此目录的内容”的解决办法

IIS7错误:“Web服务器被配置为不列出此目录的内容”的解决方法: 在"操作"下,点启用,此按钮将变成禁用,则可消除此错误 IIS7错误:"Web服务器被配置为不列出此目录的内容"的解决办法,布布扣,bubuko.com

web.config中sessionState节点的配置方案

web.config中sessionState节点的配置方案 web.config关于sessionState节点的配置方案,sessionState有五种模式:Custom,off,inProc,StateServer,SqlServer. 1.Custom模式  会话状态将使用自定义数据存储区来存储会话状态信息. 2.off模式 从字面上就可以看出这个是关闭模式,如果当前页面不需要session的值,为了减少服务器资源,你可以去掉Session的开销. <sessionState mode=

C#微信开发-微信JS-SDK(1)之通过config接口注入权限验证配置

官方文档是微信JS-SDK的使用步骤http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#JSSDK.E4.BD.BF.E7.94.A8.E6.AD.A5.E9.AA.A4 ,很多人在config接口注入权限验证配置的时候出现signature(签名无效),在这把自己开发的代码分享一下 一.验证权限我们需要获取四个参数appId.timestamp.nonceStr.signature参数获取详细见官方文档:ht