也許我從根本上誤解了requirejs config的工作方式,但我認爲我的配置使得一些庫是全局的,所以我可以在其他文件中使用它們,而只需要和定義文件我需要在個人腳本中使用。然而,我不能在我的應用程序代碼中引用$(jQuery),而沒有得到指示它不是全局訪問的引用錯誤。我已經將問題隔離到了下面的簡單示例。
我的文件設置如下:
test
|
|-index.html
|-TestApp.js
|-MainApp.js
|-lib
| |-require.js
| |-jquery.js
| |-loadash.js
| |-backbone.js
|-css
|-test.css
庫文件版本RequireJS 2.1.22和jQuery 2.0.3,Loadash 3.10.1和骨幹1.2.1。我只是試圖設置我的環境,我採取的方法是將我的TestApp.js文件傳遞給require.js以加載所需的文件並在MainApp.js中引導應用程序代碼。 index.html中的腳本如下:
<!DOCTYPE html>
<html>
<head>
<link rel='stylesheet' type='text/css' href='css/test.css'/>
</head>
<body>
<div></div>
<script src="./lib/require.js" type="text/javascript" data-main="./TestApp.js"></script>
</body>
</html>
引用的CSS腳本文件簡單地確保了DIV是一個橙色的正方形可見。見下:
div {
height: 100px;
width: 100px;
background-color: #FA6900;
border-radius: 5px;
}
這是index.html中的腳本行,然後通過將我的配置文件傳遞給requirejs來啓動應用程序代碼。這是TestApp.js作爲data-main傳遞的。該TestApp.js是在這裏:
require.config({
paths: {
'jquery': 'lib/jquery',
'lodash': 'lib/lodash',
'backbone': 'lib/backbone'
},
map: {
'*': {
// Backbone requires underscore. This forces requireJS to load lodash instead:
'underscore': 'lodash'
}
},
shim: {
jquery: {exports: '$'},
underscore: {
deps: ['jquery'],
exports: '_'
},
backbone: {
deps: ['underscore'],
exports: 'Backbone'
},
TestApp: {
deps: ['backbone'],
exports: 'TestApp'
}
}
});
require(['MainApp'], function(MainApp) {
MainApp.run();
});
上述引用的文件庫文件我想用,我再重新映射loadash需要下劃線時要加載的路徑(我需要一些額外的loadash能力) ,然後我使用shim來確保文件加載時依賴性是正確的。將此配置文件傳遞給index.html中的require.js似乎正在工作,因爲所有文件都顯示爲在我的瀏覽器中加載。然而,問題似乎是,他們似乎並不像我想的那樣是全球可訪問的。
在配置部分之後,最後一個require調用加載MainApp.js文件並調用暴露的運行函數。該MainApp.js看起來是這樣的:
define(function(require) {
var run = function() {
$(document).ready(function() {
$('div').click(function() {
$('div').fadeOut('slow');
});
});
};
return {
run: run
};
});
至於我明白我不應該需要要求我已經在需要配置提到的文件,我認爲他們應該被加載並提供此代碼。這是我誤解了正在發生的事情或錯過了一步的地方。暴露run函數被調用,但調用$第一行引發錯誤:
ReferenceError: Can't find variable: $
所以我的問題是:
- 我有什麼錯我的思想?
- (或)我做錯了什麼?
- 我應該爲了預先加載並提供 經常引用的庫可以這樣做,我並不需要要求和 在每一個文件我已經定義呢?
您需要在其中使用'$',而不只是在代碼的另一部分中......您可以將它們作爲參數傳遞給'MainApp.run($,global2,...)' – dandavis