我正在将breathJS 集成到一个已经使用knockoutJS 的现有requireJS 项目中。我遇到了几个问题。
首先是微风无法加载 Q 库,除非我将它作为<script>
标签包含在我的 html 包装器中,而不是作为加载的 AMD 依赖项。在我的项目中,我试图将我的代码保留为单个脚本标记,所以这并不理想。
第二个问题是breezeJS 无法加载淘汰赛。在我的 main.js 中,我定义了淘汰赛的路径:
knockout: '../libs/knockout/knockout-2.2.0',
(我这样做是因为我喜欢确定我没有访问 global ko
)
然而,当我在我的项目中添加微风时,微风无法加载我的淘汰赛库。查看微风代码,我可以看到它已被硬编码为将淘汰赛库加载为ko
.
不想更改我的所有代码,我发现我可以将我加载的 AMD 淘汰赛库添加到全局窗口对象中window['ko']
。但这感觉就像一个障碍。同样奇怪的是,以这种方式添加 Q 并删除<script>
标签不起作用,因为我认为 Q 在应用程序的生命周期中为时过早,甚至在我污染全局之前 - 我确实将我的require()
调用嵌套在 main.js 中,但隐藏了我的大部分应用程序文件都来自构建过程,所以我放弃了这种方法。
我怎样才能在我的项目中包含 Q 和淘汰赛和微风,并且仍然使用单行<script>
标签,目前我不得不将 Q 作为单独的<script>
标签包含并污染全局以使微风和淘汰赛能够很好地发挥作用。
我在我的项目中使用了很多其他库,但没有一个库那么难集成。
任何帮助深表感谢
干杯
加夫
编辑:这是我的完整需求配置:
require.config({
/**
* shims are for 3rd party libraries that have not been written in AMD format.
* shims define AMD modules definitions that get created at runtime.
*/
shim: {
'jqueryUI': { deps: ['jquery'] },
'jqueryAnimateEnhanced': { deps: ['jqueryUI'] },
'jqueryScrollTo': { deps: ['jquery'] },
'touchPunch': { deps: ['jquery'] },
//'Q': { exports: 'Q' },
//'breeze': { deps: ['Q', 'knockout'], exports: 'breeze' },
'path': { exports: 'Path' },
//'signalR': { deps: ['jquery'] },
},
paths: {
//jquery
jquery: '../libs/jquery/jquery-1.7.2.min',
'jquery.adapter': '../libs/jquery/jquery.adapter',
//jquery plugins
horizontalNav: '../libs/jquery/plugins/horizontalNav/jquery.horizontalNav',
jqueryUI: '../libs/jquery/plugins/jquery-ui/jquery-ui-1.9.2.custom',
jqueryAnimateEnhanced: '../libs/jquery/plugins/animate-enhanced/jquery.animate-enhanced',
touchPunch: '../libs/jquery/plugins/touch-punch/jquery.ui.touch-punch.min',
//jqueryScrollTo: '../libs/jquery/plugins/jquery-scrollTo/jquery.scrollTo.min',
//reveal: '../libs/jquery/plugins/reveal/jquery.reveal',
//opentip: '../libs/jquery/plugins/opentip/opentip-jquery',
//RequireJS
domReady: '../libs/require/plugins/domReady',
text: '../libs/require/plugins/text',
async: '../libs/require/plugins/async',
depend: '../libs/require/plugins/depend',
json: '../libs/require/plugins/json',
noext: '../libs/require/plugins/noext',
//coffee-script
'coffee-script': '../libs/coffee/coffee-script',
cs: '../libs/require/plugins/cs',
//Path
path: '../libs/path/path.min',
//Knockout
knockout: '../libs/knockout/knockout-2.2.0',
knockoutTemplateSource: '../libs/knockout/ko.templateSource',
knockoutValidation: '../libs/knockout/ko.validation',
//breeze
Q: '../libs/breeze/q',
breeze: '../libs/breeze/breeze.debug',
//Signals (Observer pattern)
signals: '../libs/signals/signals',
//SignalR - Push notifications
signalR: '../libs/signalR/jquery.signalR-0.5.2.min',
//utils
logger: 'common/logging/logger',
tinycolor: '../libs/tinycolor/tinycolor',
composing: 'common/composition/composing',
//app specific
BaseWidgetViewModel: 'app/view/core/BaseWidgetViewModel',
}
});