我第一次在项目中使用requirejs.我正在一个已经有很多Javascript的环境中工作,我正在寻找干净的方法来介绍我自己的代码.
我遇到的问题是我似乎无法找到一个我可以加载的jQuery模块,它不会破坏现有的jQuery.
我很惊讶即使require-jquery.js引入了jQuery的全局版本.有没有办法加载jQuery作为模块而不引入任何全局变量?
假设您有以下目录结构,以及以下文件:
root
|-- require-jquery.js
+-- folder
|-- index.html
|-- main.js
+-- AnotherModule.js
Run Code Online (Sandbox Code Playgroud)
在RequireJS中,当您引用以"."开头的模块时,RequireJS会查找当前模块所在的文件夹,即使这是一个子目录.但是,如果在调用define()之前更改baseUrl,则RequireJS会将依赖项映射到新的baseUrl.
您可以通过在index.html中设置baseUrl并将data-main更改为相对于baseUrl的路径来解决此问题:
文件夹/ index.html的:
<script>
var require = {
baseUrl : "../"
};
</script>
<script data-main="folder/main" src="../require-jquery.js"></script>
Run Code Online (Sandbox Code Playgroud)
文件夹/ main.js:
define(
[ "jquery", './AnotherModule' ],
function($, AnotherModule) {});
Run Code Online (Sandbox Code Playgroud)
这仅适用于define():
文件夹/ main.js:
require(
[ "jquery", './AnotherModule' ],
function($, AnotherModule) {});
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用require(),RequireJS将在root中查找AnotherModule.js,而不是文件夹.为什么会这样,特别是为什么define()和require()之间的设计差异?
我正在第一次尝试实现Require.js,虽然我正在尝试遵循这两个教程(这里和这里),但我并没有完全理解它.这是我到目前为止:
在我的索引文件中:
<script type="text/javascript" data-main="../js/main" src="../js/libs/require/require.js"></script>
Run Code Online (Sandbox Code Playgroud)
在main.js里面
require.config({ baseUrl: "../js/",
paths: {
"jq-loader": "libs/jquery/jquery",
"jqm-loader": "libs/jquery-mobile/jquery-mobile",
"someplug": "libs/someplug/somplug",
}
});
// define app and dependencies??? - not sure what goes here? All plugins I'm using?
require(['app','order!libs/jquery/jquery', 'order!libs/jquery-mobile/jquery-mobile'],
function(App){
App.start();
});
Run Code Online (Sandbox Code Playgroud)
在jquery.js里面
define([ 'order!libs/jquery/jquery.min' ], function(){ return $; });
Run Code Online (Sandbox Code Playgroud)
在jquery.js里面(取决于Jquery)
// ERROR here in "mobile" being undefined
define(['order!libs/jquery-mobile/jquery-mobile.min'], function(){ return mobile; });
Run Code Online (Sandbox Code Playgroud)
和app.js
define([ 'jq-loader', 'jqm-loader'], function($, mobile){ …Run Code Online (Sandbox Code Playgroud)