2014-09-26 77 views
15

根据this文档,public/目录应包含可以按原样投放的静态资产,而可选app/assets目录应包含需要处理的任何资产,例如,在编译阶段由minify编译器编译。Play Framework:public/vs app/assets/

对于SPA(单页应用程序),资产将包括JavaScript,CSS和图像文件...所以这意味着图像文件应该存储在public/images而JavaScript和CSS文件在app/assets/

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

回答

4

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

游戏结合了“管理”和“非托管”资产注入在生成过程中的某个文件夹

(如文档https://www.playframework.com/documentation/2.3.x/AssetsCoffeeScript提到),但管理aseets(即app/assets)被编译的内容 - 例如,JavaScript是运行jshint,然后复制已编译的版本。未管理资产(即public)按“原样”进行,不进行处理。

显然,将自己的JavaScript放入非托管public目录中并没有什么坏处,但是您没有充分利用Play为您提供的编译工具。

对于包含可自定义文件的库,取决于它。我肯定会把缩小的文件放在public之内,否则你可能会从jshint中得到编译错误。定制文件 - 取决于定制的程度。如果它只是小的“设置”类型的定制,我可能会考虑将它们与其他库文件放在一起,只是为了清楚起见。但是,如果任何正在积极开发并涉及编写代码的东西,我会让它app/assets获得jshint语法检查的好处。

此外,作为便笺,您可以将您的图像放在app/assets - 它们只会被复制而不会改变。但我发现它通过在重建上触发额外的不必要拷贝来降低速度,因此将它们放在非托管目录中效果会更好。

1

我将一切都存储在公共文件夹中:css,javascript,图像甚至更少的文件(本文档建议将它放在应用程序/资产文件夹中)。它会自动复制到资产文件夹,一切按预期工作。

对于你的第三方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>