升級到2.2後,我無法讓requirejs像以前一樣工作。play 2.2 webjars requirejs jquery integration
在我看來,requirejs沒有被初始化或配置不正確。我試圖按照https://github.com/mariussoutier/play-angular-require-seed,但我甚至不能讓最簡單的情況下工作。
jquery可以在main.js中正確定位,但需要(['jquery'] .....)在標記中不起作用。
如果有人可以幫助我,這將不勝感激。
webjars定義
libraryDependencies ++= Seq(
javaJdbc,
javaEbean,
cache,
"org.webjars" % "jquery" % "1.10.2",
"org.webjars" % "requirejs" % "2.1.1",
"org.webjars" % "webjars-play_2.10" % "2.2.0"
)
resolvers += "typesafe" at "http://repo.typesafe.com/typesafe/repo"
requireJs += "main.js"
requireJsShim += "main.js"
main.js
(function(requirejs) {
"use strict";
// -- PROD RequireJS config --
requirejs.config({
shim: {
"jquery": { exports: "$" }
},
paths: {
"jquery": ["/webjars/jquery/1.10.2/jquery.min"]
}
});
// It works fine here
require(["jquery"], function($) {
console.log($);
});
})(requirejs);
index.scala.html
@(title: String)
<html>
<body>
<script src='/lib/require.js' type='text/javascript' data-main="/assets/javascripts/main"></script>
<script type="text/javascript">
require(["jquery"], function($) {
console.log($);
});
</script>
</body>
</html>
main.js被加載,並在控制檯的錯誤消息是
Uncaught TypeError: Property 'require' of object [object Object] is not a function
編輯 這裏的關鍵是瞭解AMD的概念。雖然標籤中的兩個片段依次放置,但不能保證按順序執行。因此,當第二個代碼片段運行時,requirejs可能尚未配置。
<script src='webjars/requirejs/2.1.8/require.js' type='text/javascript' data-main="javascripts/main"></script>
<script type='text/javascript'>
// Second snippet
require(['jquery'], function($) {return $;});
</script>
爲了解決這個問題,我們有兩種不同的方法:
- 包括在main.js第二代碼段(在數據主指定)的JavaScript代碼和使用要求([「依賴」 ],function(){// do second.js})
- 包含requirejs時不要指定data-main字段,並在第二部分中執行所有配置。
恕我直言,第一種方法是優選的,是確切的一個示例項目https://github.com/mariussoutier/play-angular-require-seed
非常感謝您的澄清。我認爲require(['jquery'],...)中的所有依賴項將通過指定data-main加載,然後我可以在第二個