Javascript 使用r.js优化requirejs会导致未定义的错误
我正在使用requirejs,我有一个可以工作的应用程序,但是在运行r.js Optimizer时,我发现在编译的脚本中不可能不返回任何未定义的错误 这些错误都是加载的,类似于:Javascript 使用r.js优化requirejs会导致未定义的错误,javascript,r,optimization,requirejs,r.js,Javascript,R,Optimization,Requirejs,R.js,我正在使用requirejs,我有一个可以工作的应用程序,但是在运行r.js Optimizer时,我发现在编译的脚本中不可能不返回任何未定义的错误 这些错误都是加载的,类似于: Uncaught TypeError: undefined is not a function 在优化之前,我有0个错误,一切正常,但在使用以下构建文件运行r.js时,加载文件时会出现未定义的js错误 我的构建文件中是否有错误?我在我的应用程序中使用了几个插件,但由于垫片在优化之前已经配置好并正在工作,我很困惑为什么
Uncaught TypeError: undefined is not a function
在优化之前,我有0个错误,一切正常,但在使用以下构建文件运行r.js时,加载文件时会出现未定义的js错误
我的构建文件中是否有错误?我在我的应用程序中使用了几个插件,但由于垫片在优化之前已经配置好并正在工作,我很困惑为什么会出现问题
需要注意的一点是,r.js没有包含导致问题的require.js,为了解决问题,我在调用主脚本之前手动包含require.js,这看起来是为了解决问题,但老实说,很难说问题出在哪里
谢谢你看!:)
main.js:
require.config({
baseUrl: "*my base url*",
shim: {
jquery: {
exports: 'jQuery'
},
parsley: {
deps: ["jquery"]
},
marquee: {
deps: ["jquery"]
},
'facebook' : {
exports: 'FB'
}
},
paths: {
jquery: [
"//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min",
"vendor/jquery"
],
parsley: "vendor/parsley",
marquee: "vendor/jquery.marquee.min",
'facebook': '//connect.facebook.net/en_US/all'
},
waitSeconds: 0
});
requirejs(['jquery', 'modules/log', 'modules/util', 'modules/youtube/youtube', 'modules/ticker', 'parsley', 'modules/fb'
], function ($, log, util) {
*app stuff*
});
生成配置:
({
appDir: './',
baseUrl: './',
dir: './dist',
modules: [
{
name: 'main',
}
],
fileExclusionRegExp: /^(r|build)\.js$/,
optimizeCss: 'none',
optimize: "none",
removeCombined: true,
paths: {
jquery: "empty:",
facebook: "empty:"
},
shim: {
jquery: {
exports: 'jQuery'
},
'facebook' : {
exports: 'FB'
}
}
})
配置中的两个问题将导致神秘的问题:
define
自身。不要认为调用将是文件中的第一件事。对于JQuery,调用即将结束。搜索它r.js
)中,使用指向运行时配置(main.js
,在本例中)。优化器需要具有与运行时配置完全相同的shim
配置。当前,构建配置中的垫片列表不完整解决方案: 多亏了路易斯,我才能够解决我未定义的问题。有一些问题:
require.config({
baseUrl: "*my base url*",
shim: {
'facebook' : {
exports: 'FB'
}
},
paths: {
jquery: [
"//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min",
"vendor/jquery"
],
parsley: "vendor/parsley",
marquee: "vendor/jquery.marquee.min",
'facebook': '//connect.facebook.net/en_US/all'
},
waitSeconds: 0
});
build.js
({
appDir: './',
baseUrl: './',
dir: './dist',
modules: [
{
name: 'main',
}
],
fileExclusionRegExp: /^(r|build)\.js$/,
optimizeCss: 'none',
removeCombined: true,
mainConfigFile: './main.js',
paths: {
"jquery": "empty:"
}
})
插件示例:
define(['jquery'], function (jQuery) {
*some jquery plugin code*
});
谢谢路易斯,谢谢你的帮助!您的提示帮助我找到了问题,我将接受您的答案并添加我编辑的文件供其他人查看。