Javascript 动态requirejs配置扩展
我正在为多页项目使用requirejs。每个页面都是一个应用程序。所有应用程序都有一些共同的依赖项,即jquery、主干、下划线等 我想将所有这些依赖项移动到一个文件中 这就是js文件夹结构的外观: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
- js
- base-app-require-configuration.coffee
- 应用程序
- 家语
- 咖啡
- build.js
- 咖啡
- 附件1
- 咖啡
- build.js
- 咖啡
- 附件2
- 咖啡
- build.js
- 咖啡
- 家语
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兼容吗
让我与您分享这个解决方案 我也在寻找与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
,所以我想把它分成两部分:所有应用程序的通用依赖项和每个应用程序的依赖项。