如何构造JavaScript项目?

如何构造JavaScript项目?,javascript,requirejs,Javascript,Requirejs,我目前正在从事一个大型JavaScript项目,我们希望为其定义自己的API。我使用RequireJS作为依赖项加载程序,它非常适合我,允许我在各自的文件中定义模块。我不使用自己的名称空间,模块返回一个实例,该实例可用于其他模块,即: define( ['imported_module'], function(module){ module.doSomething(); } ) 但是,随着文件数量的增加,我想决定如何在文件夹中构造这些文件。目前,我使用以

我目前正在从事一个大型JavaScript项目,我们希望为其定义自己的API。我使用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项目的经验吗?如果有,你能分享一下你的方法吗?

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

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


没有构造js文件的最佳方法。但是,将根命名空间放在src文件夹中始终是一种好的做法。您可以在项目中查看和并使用类似的方法。它们都是大型Javascript项目。

实际上,最好让js lib路由使用标准接口加载所有js:“js.yoursite.com/lib-0.2.js”应该有一个路由器(php或其他,并且能够缓存查询)。因此,您可以确定并控制您使用的整个路径。因为普通的jquery插件应该保持在一个dir,而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/

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

您可能可以使用自定义插件来实现这一点……比如
use!stackoverflow.util.HashMap
正如blockhead所说:插件API有一个“normalize”函数,它接受一个名称并将其转换为路径。看一看:谢谢你的回答,我会看看那些来源!RequireJS的手册建议不要使用与优化工具相关的命名依赖项。感谢您的建议,尽管我担心这样的文件夹结构不适合我们的项目。