Javascript 动态requirejs配置扩展

Javascript 动态requirejs配置扩展,javascript,requirejs,amd,r.js,Javascript,Requirejs,Amd,R.js,我正在为多页项目使用requirejs。每个页面都是一个应用程序。所有应用程序都有一些共同的依赖项,即jquery、主干、下划线等 我想将所有这些依赖项移动到一个文件中 这就是js文件夹结构的外观: js base-app-require-configuration.coffee 应用程序 家语 咖啡 build.js 咖啡 附件1 咖啡 build.js 咖啡 附件2 咖啡 build.js 咖啡 主页应用程序示例: js/base应用程序需要配置。coffee def

我正在为多页项目使用requirejs。每个页面都是一个应用程序。所有应用程序都有一些共同的依赖项,即jquery、主干、下划线等

我想将所有这些依赖项移动到一个文件中

这就是js文件夹结构的外观:

  • js
    • base-app-require-configuration.coffee
    • 应用程序
      • 家语
        • 咖啡
        • build.js
        • 咖啡
      • 附件1
        • 咖啡
        • build.js
        • 咖啡
      • 附件2
        • 咖啡
        • build.js
        • 咖啡
主页应用程序示例:

js/base应用程序需要配置。coffee

define ->
  requirejs.config
    urlArgs: "bust=#{ new Date().getTime() }"

    # yep, tricky paths here
    paths: 
      jquery: '../../jquery.min' 
      underscore: '../../underscore-min'
      backbone: '../../backbone.min'
define [
  '../../base-app-require-configuration'
], (
  baseRequireConfig
) ->
  requirejs.config
    paths:
      'jquery.alphanum': '../../jquery.alphanum'
    shim:
      'jquery.alphanum':
        deps: ['jquery']

  require [
    'jquery'
    'application'
  ], (
    $
    Application
  ) ->
    $ -> new Application
js/app/homepage/init.coffee

define ->
  requirejs.config
    urlArgs: "bust=#{ new Date().getTime() }"

    # yep, tricky paths here
    paths: 
      jquery: '../../jquery.min' 
      underscore: '../../underscore-min'
      backbone: '../../backbone.min'
define [
  '../../base-app-require-configuration'
], (
  baseRequireConfig
) ->
  requirejs.config
    paths:
      'jquery.alphanum': '../../jquery.alphanum'
    shim:
      'jquery.alphanum':
        deps: ['jquery']

  require [
    'jquery'
    'application'
  ], (
    $
    Application
  ) ->
    $ -> new Application
js/app/homepage/build.js

({
mainConfigFile: ['../../base-app-require-configuration.js', 'init.js'],
wrapShim: 'true',
baseUrl: './',
name: 'init',
findNestedDependencies: true,
out: 'init.js'
})
我的数据名是init.js

这对于多个应用程序来说效果很好,这些应用程序的公共依赖项被移动到一个单一文件中-基本应用程序需要配置。coffee,除了一件事:使用r.js压缩/优化它的唯一方法是将标志FindEndedDependencies设置为true,因为否则r.js将不会看到嵌套在define/require中的requirejs.config调用

我的问题是:

  • 使用FindEndedDependencies是一种良好的做法吗
  • 有没有更漂亮的方法来组织我的依赖项而不重复
  • 如果有这样一种方法,它会与r.js兼容吗
使用findNestedDependencies是一种良好的做法吗

不确定。我所知道的唯一一件事是,此选项可以大大降低捆绑过程的速度:

有没有更漂亮的方法来组织我的依赖项而不重复? 如果有这样一种方法,它会与r.js兼容吗

这是一篇关于使用r.js组织主干模块的优秀文章:

让我与您分享这个解决方案

我也在寻找与requirejs类似的解决方案(如何组织多页项目而不重复长配置,具有“垫片”功能),我找到了以下解决方案(如果这段代码可以帮助您,我会很高兴):

内部HTML:


//加载包含config的通用代码,然后加载应用程序
//此页的逻辑。在此处执行requirejs调用,而不是
//一个单独的文件,因此在构建之后只有2个HTTP
//请求而不是三个。
requirejs(['./js/common'],函数(common){
//js/common将baseUrl设置为js/so
//您可以在此处请求“app/main1”
//“js/app/main1”的名称
requirejs(['app/main1']);
});

其中“common.js”包含项目的requirejs的公共配置。此示例来自:

示例项目的完整代码如下:。示例“build.js”文件也是providen文件,我认为在这种情况下“findNestedDependencies”没有必要


当然,HTML中还有更多的代码,但我认为这并不是什么明显的缺点

这篇文章我读过一次,这次也读过,但它只提供了一个单页应用程序的信息。我现在有多个应用程序,每个init文件都复制了很大一部分
requirejs.config
,所以我想把它分成两部分:所有应用程序的通用依赖项和每个应用程序的依赖项。