如广告所示,Play中的rjs
可以
但是,我似乎无法使其中任何一个起作用。
.min
版本。 jquery
时define(['jquery'],function($){
“使用严格”;
console.log($。grep);
返回 {
sum:函数(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)
显然,尽管Webjar生成了配置设置,但它查找的是jQuery的错误位置
requirejs.config({"paths":{"jquery":["/webjars/jquery/1.11.1/jquery","jquery"]},"shim":{"jquery":{"exports":"$"}},"packages":[]}) }
具有正确的
jquery
位置。我正在使用build 2.sbt中带有
pipelineStages := Seq(rjs, digest)
设置的Play 2.4.0。请让我知道我在哪里弄错了。
谢谢!
最佳答案
事实证明,RequireJS优化支持并不适用于所有Webjar,而是仅限于Classic Webjar。
即使这样,常规模块也必须包含一个webjar构建文件,以使rjs正常工作。
例如,如果您查看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就绪的脚本,在声明
paths
时不应使用方括号。否则,rjs会拒绝生成错误path fallback not supported
。当然,您不会获得CDN的好处。只是一点说明,RequireJS css优化也可以。但仅限于内联css,就像常规的Requirejs一样。