【发布时间】:2013-10-27 04:26:02
【问题描述】:
升级到play 2.2后,我无法让requirejs像以前一样工作。
在我看来,requirejs 没有正确初始化或配置。我尝试关注https://github.com/mariussoutier/play-angular-require-seed,但我什至无法让最简单的情况起作用。
jquery在main.js中可以正确定位,但是require(['jquery'].....)在tag中不起作用。
如果有人可以帮助我,将不胜感激。
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 的概念。虽然 tag 中的两个 sn-ps 是一个接一个的放置,但不能保证它们按顺序执行。所以第二个sn -p运行的时候,可能还没有配置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 中包含第二个 sn-p 的 javascript 代码(在 data-main 中指定)并使用 require(['dependencies'], function() {// do second.js})
- 在包含requirejs时不要指定data-main字段,做第二部分的所有配置。
恕我直言,第一种方法是首选方法,并且与示例项目https://github.com/mariussoutier/play-angular-require-seed中使用的方法完全相同
【问题讨论】:
标签: javascript jquery requirejs playframework-2.2 webjars