RequireJS:多个main.js?

时间:2011-11-10 15:05:05

标签: javascript module requirejs

我一直在使用requireJS构建单页应用程序,并且到目前为止还爱它。我已经开始在主应用程序之外开发网站的其他部分,并且我不确定如何(或是否)使用requireJS。

在我的主应用程序中,所有内容都由此脚本标记触发:

<script data-main='/scripts/main' src='/scripts/libs/require.js'>

我现在正在开发拥有自己的前端脚本的主页。在获取站点时使用优化器将所有这些脚本捆绑到一个main.js包中。我很难理解我的网站的其他部分适合这个。

假设我的应用程序依赖于jQuery并且它被捆绑在应用程序的优化版本中,如果我想在主页上使用jQuery怎么办?我不想加载我的应用程序main.js只是为了访问我的jQuery模块。 所以是的......有点困惑!


我想象的网站结构有点像这样:

/scripts
  - app-main.js //(includes all module dependencies after optimzation)
  - home-main.js //(includes all module dependencies after optimzation)

应用:

<script data-main='/scripts/app-main' src='/scripts/libs/require.js'>

主页:

<script data-main='/scripts/home-main' src='/scripts/libs/require.js'>


问题

  1. 如何使用RequireJS开发网站的不同部分?
  2. 是否建议使用多个main.js文件?
  3. 我的不同main.js文件如何共享jQuery post optimization等常用模块?

2 个答案:

答案 0 :(得分:38)

requirejs团队为github上的多页面应用程序提供了一些示例。 看看:https://github.com/requirejs/example-multipage

基本上你将拥有以下结构:

  • page1.html:该应用的第1页。

  • page2.html:该应用的第2页。

  • js app:存储特定于应用程序的模块的目录。

  • lib:保存第三方模块的目录,如jQuery。

  • common.js:包含requirejs配置,它将是公共模块集的构建目标。

  • page1.js:用于page1.html的data-main。加载公共模块,然后加载app / main1,即第1页的主模块。

  • page2.js:用于page2.html的data-main。加载公共模块,然后加载app / main2,第2页的主模块。

答案 1 :(得分:0)

因此,应始终在任何页面上使用require.js以允许模块化和干净的命名空间。我相信每个'app'都需要它自己的main.js脚本。在优化您的站点时,r.js允许您从编译中排除您应该为jQuery做的模块。

这样,require.js将始终在缓存中加载jquery.js,大部分时间从缓存加载。查找可能在您的应用和主页之间缓存的其他模块必须由您自行决定,具体取决于您的用户流量和其他因素。

听起来你有两个项目,一个应用程序和一个营销网站。我认为这些应该分开到相当长的一段时间,并且应该有各自的'js'文件夹,其中包含自己的main.js。