Play框架:public / vs app / assets /

时间:2014-09-26 09:30:24

标签: playframework

根据this文档,public/目录应包含可按原样提供的静态资产,而可选的app/assets目录应包含任何需要处理的资产,例如,在构建阶段通过minify编译器。

如果是SPA(单页应用程序),资产将包括JavaScript,CSS和图像文件......这也意味着图像文件应存储在public/images中,而JavaScript和CSS文件应存储在app/assets/中{1}}?

然后,我还需要集成第三方模块,该模块由缩小的JavaScript库和需要自定义的非缩小JavaScript文件组成......我该如何管理?我应该在public/中保留标准的,已经缩小的资产,并将自定义的JavaScript文件移至app/assets/javascripts/吗?

2 个答案:

答案 0 :(得分:4)

是的,你所描述的是正确的。

播放结合来自"托管"的内容和#34;非管理"在构建过程中将资产放入单个文件夹(如文档https://www.playframework.com/documentation/2.3.x/AssetsCoffeeScript中所述)

但是管理的aseets(即$data=json_decode(json_encode((array)simplexml_load_string($lottery)),1); )被编译 - 例如,javascript通过app/assets运行,然后复制编译的版本。非托管资产(即jshint)采用"原样#34;没有处理。

显然,将自己的javascript放入非托管public目录是没有害处的,但是你没有利用Play给你的编译工具。

对于包含可自定义文件的库,它取决于。我肯定会将缩小的文件放在public中,否则你可能会从jshint中获得编译错误。自定义文件 - 取决于自定义的范围。如果它只是很小的设置"为了清晰起见,我可以考虑将它们与其他库文件放在一起。但是,如果它处于活跃开发状态并涉及编写代码,那么我会将其public用于获得jshint语法检查的好处。

另外,作为附注,您可以将图像放在app/assets中 - 只需复制它们即可。但我发现通过在重建时触发额外的不必要副本会使事情变得更慢,因此在非托管目录中使用这些副本会更好。

答案 1 :(得分:1)

我将所有内容存储在公共文件夹中:css,javascript,images甚至更少的文件(本文档建议将其放在app / asset文件夹中)。它将自动复制到资产文件夹,一切都按预期工作。

对于您的第三方js库,如果它只是普通的js(缩小或不缩小),请将其放在公共文件夹中。 如果有咖啡脚本/更少的文件,请考虑遵循文档并将其全部放在资产文件夹中。

如果您的文件位于公共文件夹中,请在模板中添加以下行:

<link href="@routes.Assets.at("stylesheets/myCss.css")" rel="stylesheet">
<script src="@routes.Assets.at("javascripts/myJs.js")" type="text/javascript" defer="defer" ></script>