我第一次使用require.js和r.js而且我几乎已经对它进行了排序,但是在我用r.js构建应用程序并上传到服务器后,jquery丢失了。
实际上它正在寻找不在服务器上的jquery.js(因为我希望它仍然会像我原来的require config一样使用cdn)。
1)我应该包含jquery而不是从cdn加载吗?这让我有点紧张,因为我认为从cdn加载jquery总是更好。或者我应该在另一个电话中加载jquery?
2)我做错了什么并且应该加载jquery cdn?
有人能指出我为什么jquery没有加载正确的方向?我认为我在使用带有r.js
的cdn时正确地遵循了所有配置继承我的设置
common.js
require.config({
baseUrl: 'js/',
enforceDefine : true,
paths: {
'jquery': ['//code.jquery.com/jquery-1.11.0.min','/js/lib/jquery-1.11.0.min'],
'modernizr':'lib/modernizr.2.8.2',
'bootstrap':'lib/bootstrap.min.amd',
'safeBrowsing':'lib/safe.browsing.amd',
'owl':'lib/owl.carousel.min.amd',
'placeholder':'lib/placeholder.amd',
'easyPieChart':'lib/easyPieChart.amd',
'jqueryEasing':'lib/jquery.easing.amd',
'infoBubble':'lib/infobubble.amd',
'async':'lib/require/async',
'font':'lib/require/font',
'goog':'lib/require/goog',
'image':'lib/require/image',
'json':'lib/require/json',
'noext':'lib/require/noext',
'mdown':'lib/require/mdown',
'propertyParser':'lib/require/propertyParser',
'blueImpGallery': 'lib/blueimpGallery/jquery.blueimp-gallery'
},
priority: ['jquery'],
shim: {
'jquery': {
exports: '$'
},
'blueImpGallery' : {
exports : 'jquery'
},
}
});
main.js
define(['jquery','modernizr','bootstrap','safeBrowsing','owl','blueImpGallery','infoBubble'],function($){
console.log('foo bar');
});
build.js
({
mainConfigFile : "../js/common.js",
appDir: "../",
baseUrl: "js",
dir: "../../code-build/",
removeCombined: true,
findNestedDependencies: true,
optimize: "uglify2",
optimizeCss: "standard",
paths: {
'jquery': "empty:"
},
modules: [
{
name: "main",
exclude: ['jquery']
}
],
wrapShim: 'true',
generateSourceMaps: true,
preserveLicenseComments: false,
fileExclusionRegExp: /^admin$|.psd$|git-ftp|build|testnoise.sublime-project|testnoise.sublime-workspace/
})
答案 0 :(得分:0)
我很确定问题是你正在为jQuery使用shim
配置。 jQuery多年来一直在调用define
。版本1.11.0肯定会调用它。 (我知道,因为我已经使用过了。)所以删除你对jQuery的shim
。同时验证其他模块做实际上是否需要垫片。如果他们调用define
向RequireJS注册自己,请检查他们的代码,不要使用填充程序。如果您使用带有调用define
的模块的垫片,您将得到未定义的行为。在某些情况下它会神秘地起作用,而在其他情况下会神秘地失败。
此外,priority
是RequireJS 1.x选项,在RequireJS 2.x中被忽略。
答案 1 :(得分:0)
在你的common.js文件中,有什么特别的原因你不能使用" baseUrl + paths"您的jQuery回退路径的URL样式?所以不要使用" /js/lib/jquery-1.11.0.min"你会使用" lib / jquery-1.11.0.min"?我想知道前一种路径是否导致RequireJS无法将jQuery识别为模块。
另外,在你的build.js文件中,我想知道是否真的有必要指定jQuery应该从主模块中排除(通过" exclude"选项) ?也许路径配置(通过"空"选项)足以确保jQuery(无论是来自CDN还是来自回退路径)被排除在构建之外?
无论如何都要尝试一些事情。希望他们有所帮助。
=====
再次查看代码,我也想知道这个部分的shim配置:
...
'blueImpGallery' : {
exports : 'jquery'
},
...
假设blueImpGallery的工作方式与普通的jQuery插件类似,而jQuery是唯一的依赖项,那么应该将jQuery声明为插件的依赖项,如下所示:
...
'blueImpGallery' : {
deps : ['jquery']
},
...
在这种情况下,blueImpGallery不需要导出任何全局变量。
我还重申路易斯所说的关于检查是否需要填充任何其他模块的内容。