main.js
中的
require.config({
waitSeconds: 15,
urlArgs: "version=" + new Date(), //to make sure we have no caching problems during development
deps: ["main"],
baseUrl: '../js/',
paths: {
"jquery": "jquery-1.11.0",
"myliba": "myliba"
},
shim: {
"myliba": {
exports: "myliba",
deps: ["jquery"]
},
"jquery": {
exports: "$"
}
}
});
require(["myliba"], function () {
myliba.test();
});
myliba.js
中的
define("myliba", function () {
var myliba = {};
test: function (){
alert("requireJs is easy to use, it is well worth the hassle");
}
});
结果
未捕获的ReferenceError:未定义myliba
如果我将alert("lovin requirejs");
添加到myliba
我很好地获取警报,因此它会被加载和评估。我的myliba定义虽然没有导出。
我读--->here<---,如果你以shim方式这样做,就不能在函数调用中声明参数。
就我而言,除了垫片之外没有其他干净的方法。想象一下我有: jquery,jqueryui,myliba,mylibb
myliba依赖于jquery
mylibb取决于依赖于jquery的jqueryui和myliba
除了垫片之外我无法想出一个干净的方式
答案 0 :(得分:1)
amd模块通过在末尾返回一些东西(字符串,函数,对象)来解析。
define("myliba", ["jquery"], function ($) {
return {
test: function () {
alert("requireJs is easy to use, it is well worth the hassle");
}
};
});
<强> UPD:强>
我希望现在我理解你是对的,这个解决方案会对你有所帮助:
require.config({
paths: {
jquery: 'jquery-1.11.0',
jqueryui: 'path/to/jquery-ui'
},
shim: {
jquery: {
exports: '$'
},
jqueryui: {
deps: ['jquery'],
exports: '$'
}
}
});
define('myliba', ['jquery'], function($) { ... });
define('mylibb', ['myliba', 'jqueryui'], function(myliba, $) { ... });
require(['myliba', 'mylibb'], function(myliba, mylibb) { ... });
答案 1 :(得分:-1)
好吧,所以我在jQuery文件中看到了这个,好像这就是它必须要完成的方式。
// Expose jQuery and $ identifiers, even in
// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
// and CommonJS for browser emulators (#13566)
if ( typeof noGlobal === strundefined ) {
window.jQuery = window.$ = jQuery;
}
所以
define("myliba", function () {
var myliba = {};
test: function (){
alert("requireJs is easy to use, it is well worth the hassle");
}
window.myliba = myliba;
});
解决问题