如何使用RequireJS构建JavaScript项目

时间:2012-03-05 16:11:30

标签: javascript project-management requirejs

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

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 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分: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/

我们使用这种结构大约一年,这对我们来说是最好的。但有时我们会使用更复杂的解决方案,并将所有模块与库,插件,工具,组件和应用程序分开。