正如所宣传的那样,Play中的rjs
可以
确保从WebJar中引用任何JavaScript资源 从jsdelivr CDN自动引用。另外如果有的话 然后找到.min.js文件,代替.js。一个补充 这里的奖励是你的html不需要改变!
然而,我似乎无法让任何这些工作。
.min
版本的javascript文件。我不能让依赖注入在生产模式下工作。例如,当我想在我的代码中注入jquery
时,就像这样
define([' jquery'],function($){ '使用严格的&#39 ;; 的console.log($ grep的); 返回{ sum:function(a,b){ 返回a + b; } }; });
我可以让它在开发模式下正常工作,但在生产模式下,rjs
失败说
[info] Error: ENOENT, no such file or directory '/Users/khanguyen/Desktop/rjsdemo/target/web/rjs/build/js/jquery.js'
[info] In module tree:
[info] main
[info] app
[info]
[info] Error: Error: ENOENT, no such file or directory '/Users/khanguyen/Desktop/rjsdemo/target/web/rjs/build/js/jquery.js'
[info] In module tree:
[info] main
[info] app
[info]
[info] at Error (native)
显然它正在查看jQuery的错误位置,尽管Webjar生成了配置设置
requirejs.config({"paths":{"jquery":["/webjars/jquery/1.11.1/jquery","jquery"]},"shim":{"jquery":{"exports":"$"}},"packages":[]}) }
获取jquery
的正确位置。
我正在使用Play 2.4.0,并在build.sbt中设置pipelineStages := Seq(rjs, digest)
。
请告诉我哪里弄错了。
谢谢!
答案 0 :(得分:4)
事实证明,RequireJS优化支持不适用于所有Webjars,而是仅限于Classic Webjars。
即使这样,一个webjar构建文件也必须包含在常规模块中,以便rj工作。
例如,如果你看一下jQuery经典的webjar,你会看到包含一个特殊的webjar构建指令。请查看该文件以获取您的信息。
一旦你确定了一个准备好了RequireJS的webjar,你就可以让sbt-rjs做到这一点。以下是我的参考设置:
/** javascripts/main.js **/
'use strict';
requirejs.config({
paths:{
'jquery': ['../lib/jquery/jquery'],
'react': ['../lib/react/react'],
'bootstrap': ['../lib/bootstrap/js/bootstrap'],
'react-bootstrap': ['../lib/react-bootstrap/react-bootstrap']
},
shim: {
'bootstrap': {
deps: ['jquery']
},
'react-bootstrap': {
deps: ['react']
}
}
});
请记住使用方括号,否则不会发生CDN替换。
对于非requirejs ready脚本,在声明paths
时不应使用方括号。否则,rjs将拒绝构建错误path fallback not supported
。当然,你没有获得CDN的好处。
请注意,RequireJS css优化也适用。但仅限于内联css,就像常规的Requirejs一样。