我正在努力弄清楚如何最好地管理Javascript文件依赖关系,并推动100%前端应用程序的打包。简而言之,我正在使用backbone.js和其他一些库构建应用程序。我想要一个有组织的代码库,并希望能够在每个文件中声明依赖项。理想情况下,这些声明将a)驱动浏览器加载文件的顺序(在开发中我希望文件单独加载)并驱动打包脚本加载脚本以进行连接的顺序(我的目标是服务整个应用程序的单个文件。)
我一直在阅读requirejs和commonjs,但我不相信。
我现在有一个简单的shell脚本,它使用cat <file> <file> <file> <file> > concatenated.file
来做我想要的事情,但是按照正确的顺序维护该文件列表是一件痛苦的事。能够在每个javascript文件的开头声明依赖关系并让打包器和加载器聪明地使用该信息来连接/加载脚本会更容易。
有什么建议吗?
谢谢你,
路易斯
答案 0 :(得分:2)
我自己偏爱stealjs。它是JavascriptMVC的一部分,但没有理由不能将它与Backbone.js一起使用
关于这个的好处是它为生产构建你的应用程序,包括缩小你的css和js,并将它们整齐地打包成2个文件:production.css和production.js。
它也可以处理加载非JS文件,所以你可以做steal('somefile.css')之类的东西。然后(function(){...});
对于文件,它与其他语言非常相似:
steal(dep1, dep2, dep3).then(function () {
// code
});
答案 1 :(得分:1)
对于复杂的前端应用程序异步模块定义(AMD)格式是最佳选择。并且它有很多支持AMD的强大加载器(curl.js,RequireJS)。
我推荐这篇文章来了解javascript依赖管理中的现代方法:
Writing Modular JavaScript With AMD, CommonJS & ES Harmony
对于包装考虑到CommonJS规格,实施很少,这是一个品味问题,但无论如何我建议选择符合某些规格的工具。
答案 2 :(得分:0)
能够在每个javascript文件的开头声明依赖关系并让打包器和加载器聪明地使用该信息来连接/加载脚本会容易得多。
几个月前我有同样的想法,正在为我的Resource Builder开发一个依赖项解析器,这对我来说已经很容易了(包括需要区分开发和已部署的版本,以及可选的{{ 1}}参数)。
JsDoc Toolkit(及相关工作),支持哪种语法e。 G。 Eclipse JSDT提供@requires
标记,因此您可以使用该标记。但解决依赖关系仍然不是一项简单的任务(正如您在debug
中看到的那样)。 (最终目标是使用静态代码分析自动解决依赖关系,而无需任何标记。)
这会减少当前的
ResourceBuilder::resolveDeps()
仅仅
<script type="text/javascript" src="builder?src=object,types,dom,dom/css"></script>
异步加载器:异步加载器的好处是它们很快。异步加载器的坏处是 - 如果它们工作;它们都基于非标准方法 - 它们非常快,您无法确定脚本提供的功能是否可用于以下脚本。所以你必须让他们的代码由他们的听众执行。我建议避免使用它们,除非您的应用程序中确实只有按需需要的功能。