我目前正在开发一个我们想要定义自己的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项目的经验?如果有,您可以分享您的方法吗?
答案 0 :(得分:9)
您不应在js文件名上指定路由信息,这些是命名空间和文件夹路径的作业。所以stackoverflow / util / HashMap.js就好了。你可以使用 define(“stackoverflow / util / HashMap”,....)来告诉依赖。
如果您需要将模块放在不同的文件夹中,可以为加载程序配置路径,请参阅RequireJS API中的this manual。
没有最好的方法来构建你的js文件。但是将根命名空间放在src文件夹中始终是一个好习惯。您可以看到dojo source code和YUI 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/
我们使用这种结构大约一年,这对我们来说是最好的。但有时我们会使用更复杂的解决方案,并将所有模块与库,插件,工具,组件和应用程序分开。