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

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

index.htmlmain.jslibs–haha.js–cores–cores1.js–core2.js–utils–util1.js–util2.js–services–service1.js–service2.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"这种格式的模块了。

你并不一定会从此拥有更美好的人生,

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

相关文章:

你感兴趣的文章:

标签云: