要求:
根据下面的配置文件
module=[ {'name':'jquery','src':'/js/lib/jquery-1.8.3.js'}, {'name':'swfobject','src':'/js/utils/swfobject.js'}, {'name':'fancybox','src':'/js/jquery/jquery.fancybox.js','require':['jquery']}, {'name':'uploadify','src':'/js/utils/uploadify.js','require':['swfobject']}, {'name':'jqform','src':'/js/jquery/jquery.form.js','require':['jquery']}, {'name':'register','src':'/js/page/reg.js','require':['jqform']}, {'name':'login','src':'/js/page/login.js','require':['fancybox','jqform']}, {'name':'upload','src':'/js/page/upload.js','require':['fancybox','jqform','uploadify']} ]
写一个函数
def getfiles(name)
返回 加载某个name指定的页面,要加载的js文件列表,有依赖的要先加载
小菜解法
此题粗看起来很简单,实则不然。
难点在于依赖模块的加载时机。假如有这样的依赖关系:A-B&C、B-C,A模块依赖B模块和C模块,同时B模块又依赖了C模块,总不能让C加载两次吧!
小菜给出的这个解法,只是一个思路,肯定有比这更好的算法,小菜觉得可以用二叉树之类的算法解决,但小菜不会呀~~~
此算法没有考虑循环依赖的情景。
代码如下:
/** * 不考虑循环依赖 * @type {Function} */ var loadModule = (function(){ /** * 业务逻辑封装 * @type {{chainHead: {}, chainCurrent: {}, srcCache: {}, main: main, load: load, findModule: findModule}} */ var logics = { chainHead: {}, //链表头 chainCurrent: {}, //链表当前节点 srcCache: {}, //module src 缓存 /** * 对外接口 * @param modules 配置对象 * @param name 模块名称 * @returns {Array} 依赖模块列表,按照加载先后顺序排列 */ main: function(modules, name){ var nameArray = [], //模块名称列表 srcArray = [], //依赖模块列表 nameStr = "", //模块名称字符串集 repeatRegex = /(^| )([\w]+ ).*\2/, //模块名称去重正则 i = 0; //粗略加载所有依赖模块 this.load(modules, name) //构造模块名称字符串集 this.chainCurrent = this.chainHead; while(this.chainCurrent.next){ nameArray.push(this.chainCurrent.name); this.chainCurrent = this.chainCurrent.next; } nameStr = nameArray.join(" ") + " "; //统一标准,末尾补一个空格 //依赖模块去重 while(repeatRegex.exec(nameStr)){ nameStr = nameStr.replace(repeatRegex, function(g0, g1, g2){ return g0.substring(0, (g0.length - g2.length)); }); } nameStr = nameStr.substring(0, (nameStr.length - 1)); //去掉补充的多余空格 //依赖模块名称转换为模块路径 nameArray = nameStr.split(" "); for(i = 0; i < nameArray.length; i++){ srcArray.push(this.srcCache[nameArray[i]]); } return srcArray; }, /** * 递归加载模块 * @param modules 配置对象 * @param name 模块名称 */ load: function(modules, name){ var node = {}, module = this.findModule.call(modules, "name", name), i = 0; //判断模块是否存在 if(!module){ throw Error("依赖模块 " + name +" 未找到"); } //构造模块依赖链表 node.name = name; // node.src = module.src; this.srcCache[name] = module.src; node.next = this.chainHead; this.chainHead = node; //递归依赖 if(module.require && module.require.length){ for(i = 0;i < module.require.length; i++){ this.load(modules, module.require[i]); } } }, /** * 根据指定属性名称和属性值查找模块 * @param name 属性名称 * @param value 属性值 * @returns {*} */ findModule: function(name, value){ var array = this, item = {}, i = 0; //遍历模块 for(i = 0; i < array.length; i++){ item = array[i]; //获取指定模块 if(item && item[name] === value){ return item; } } //找不到返回null return null; } }; //暴露对外接口 return function(){ return logics.main.apply(logics, arguments); }; }()); /** * Test Usecase * @type {*[]} */ var modules=[ {'name':'jquery','src':'/js/lib/jquery-1.8.3.js'}, {'name':'swfobject','src':'/js/utils/swfobject.js'}, {'name':'fancybox','src':'/js/jquery/jquery.fancybox.js','require':['jquery']}, {'name':'uploadify','src':'/js/utils/uploadify.js','require':['swfobject']}, {'name':'jqform','src':'/js/jquery/jquery.form.js','require':['jquery']}, {'name':'register','src':'/js/page/reg.js','require':['jqform']}, {'name':'login','src':'/js/page/login.js','require':['fancybox','jqform']}, {'name':'upload','src':'/js/page/upload.js','require':['fancybox','jqform','login','uploadify']} ]; console.log(loadModule(modules, "upload"));
我正在为vscode做一些扩展。在这个扩展中,我使用命令。为了让这个函数返回扩展名的值,我需要等待测试工作区被“加载”/“索引”,这样就可以处理JS文件并在其中导入。你还需要从工作区打开一个文件,这样它就可以开始“加载”。我想确定它是否在打开一个工作区后加载了它所需的所有内容,这样我就可以安全地触发命令。vscode是否有某种标志/事件指示工作区是否已完全加载?
模块加载配置文件coolie-config.js,用于配置模块加载器的参数。 coolie.config>base 配置入口模块的基准路径。 coolie.config({ base: "./path/to/app" }); 模块加载器配置非常简单,只有一个配置项。 coolie.config>debug 默认为true,构建后会被重写为false。 coolie.config({
我试图在一个带有Gradle的Spring Boot应用程序中使用log4j2。我有4个不同的配置文件:。相应地,我有4个不同的log4j2配置文件:。根据选定的概要文件,我希望选择正确的log4j2配置文件,以便对其进行相应的配置。 首先,为了使log4j2正常工作,我排除了,而是包含了。在执行此操作之前,log4j2根本不起作用。 我已经调查了这篇文章,但我无法得到公认的工作答案。根据这篇文章
使用spring配置文件,我们可以根据注释加载特定的bean。是否可以根据环境加载特定的配置类。实际上,config类是用特定的注释(如)注释的,它总是被加载。并要求可选地加载它。 谢谢
使用 ➜ coolie init -j ╔══════════════════════════════════════════════════════╗ ║ coolie@1.0.22 ║ ║ The front-end development builder. ║ ╚══════
我有一个SpringWeb应用程序,它是作为maven工件a.war创建的。它有一个maven依赖项和一个工件B.jar。工件B的src/main/resources有一个文件测试。txt。我想读一下测试文件。来自神器A.war的txt。当我引爆B.jar时,我看到了测试结果。jar的根位于txt中。在A中,我尝试使用文件f=new ClassPathResource(“test.txt”)读取该