2012-03-05 48 views
14

我目前正在为我们想要定义我们自己的API的大型JavaScript项目工作。我使用RequireJS作为我的依赖加载器,它很适合我,允许我在各自的文件中定义模块。我不使用我自己的命名空间,模块返回一个实例,它可以在其他模块使用,即:如何使用RequireJS构建JavaScript项目

define(
    ['imported_module'], 
    function(module){ 
     module.doSomething(); 
    } 
) 

然而,随着文件数量的增加,我想,以决定如何构建这些文件在文件夹中。目前我使用下面的方案来命名我的文件:

[projectname].[packagename].[ModuleName] 

一个例子可以stackoverflow.util.HashMap.js。我想向大家介绍一个项目文件夹,每包一个文件夹,重命名文件到模块的名称,如:

stackoverflow/util/HashMap.js 

这个结构我的代码很整齐地到文件夹,但文件名,现在只反映模块。我想定义一些路由能够定义RequireJS应该如何查找文件。例如:

文件

stackoverflow/util/stackoverflow.util.HashMap.js 

应由语句导入的

define(['stackoverflow.util.HashMap'],function(HashMap){}); 

有与结构化大型的JavaScript项目,如果是这样的人的经验,你可以分享你的做法?

+2

你可以使用自定义插件来做到这一点......类似于'use!stackoverflow.util.HashMap' – blockhead 2012-03-05 16:17:57

+1

由于blockhead说:插件API有一个“标准化”函数,它取一个名字并将其转换为路径。看看:http://requirejs.org/docs/plugins。html#apinormalize – David 2012-03-09 08:33:58

回答

9

您不应在您的js文件名中指定路由信息这些是命名空间和文件夹路径的作业。所以stackoverflow/util/HashMap.js就好了。你可以使用define(“stackoverflow/util/HashMap”,....)来告诉依赖关系。

如果您需要将模块放在不同的文件夹中,则可以为加载器配置路径,请参阅RequireJS API中的this manual

没有最好的方式来构建您的js文件。但是将根名称空间放在src文件夹中始终是一种好的做法。您可以看到dojo source codeYUI source code,并为您的项目使用类似的方法。他们都是大型Javascript项目。

+0

感谢您的回答,我会看看这些资源! RequireJS的手册建议不要使用关于优化工具的命名依赖关系。 – thomaux 2012-03-09 15:12:19

2

实际上最好是让js lib路由来使用标准接口加载所有js:“js.yoursite.com/lib-0.2.js”应该有一个路由器(php或其他,并且能够缓存查询)。所以你可以确定和控制你使用的整个程序。因为常见的jquery插件应该停留在一个目录中,使用jquery,而不是你自己的自定义插件。

有你控制每个项目由它自己的规则:

jquery/ 
    plugins/ 
    jquery.prettyPhoto.js 
    jquery.min.js 

mySuperJS/ 
    stable.0/ -- there your production version for 1.0 branch 
    module.js 
    0.1/ 
    module.js 
    0.2/ 
    module.js 
    0.3/ 
    module.js 

myOtherlib/ 
    stable.0/ -- production version for all 0.* versions 
    stable.1/ -- production version for all 1.0 versions 
    0.1/ 
    0.2/ 
    0.3/ 
    0.4/ 
    0.4.1/ 
    0.4.1.18/ 

我们使用一年左右这样的结构,它是对我们最好的。但有时我们会使用更复杂的解决方案,并将libs,插件,工具,组件和应用程序的所有模块分开。

+0

感谢您的建议,但恐怕这样的文件夹结构不适合我们的项目。 – thomaux 2012-03-12 09:33:05

相关问题