Symfony 3 和 Angular 2 文件夹结构


Symfony 3 and Angular 2 Folder Structure

我是Symfony和Angular的新手,我正在尝试弄清楚这些部分将如何组合在一起。我想为我的后端和Web api使用Symfony。我想将 Angular 用于前端桌面般的体验。

我不确定文件夹结构应该如何。我是否将我的角度JavaScript/打字稿文件放在Symfony项目根目录下的文件夹中,并利用它们的文件夹结构。或者我的 src 文件夹中有两个捆绑包。一个用于后端/网站。另一个用于前端?还是后端应该提供插入了角度组件的树枝模板?

*****编辑*****

@Tobias Xy 如果我错了,请纠正我,但这会在 src 文件夹中创建捆绑包并将其中的资源文件夹中的文件保持正确?

然后我在底部看到以下内容:

基于前端的应用程序

最近,像AngularJS这样的前端技术已经变得相当漂亮。 在开发与 API 通信的前端 Web 应用程序时很流行。

如果您正在开发这样的应用程序,则应使用 该技术推荐的工具,例如 Bower 和 咕噜咕噜。您应该独立于开发前端应用程序 你的Symfony后端(如果需要,甚至可以分离存储库)。

所以他们说做两个单独的项目,而不是在前端使用捆绑包?

如果是这样,您如何托管它?在两个不同的网站上?

Symfony是一个后端框架,所以添加一个只包含前端文件(css,javascript等)的捆绑包是没有意义的。

参见 Web Assets (Symfony Best Practices)

他们在那里说:

将您的资产存储在 web/目录中。

更新 23.03.2016

Cerad在评论中写道:"客户端angularjs和reactjs应用程序有自己的构建系统,就像Symfony一样。这实际上是一个不同的主题,但我上面链接的文章也谈到了这一点:

最近,像AngularJS这样的前端技术在开发与API通信的前端Web应用程序方面变得非常流行。

如果你正在开发这样的应用程序,你应该使用该技术推荐的工具,如Bower和GruntJS。你应该把你的前端应用程序与你的Symfony后端分开开发(如果你愿意,甚至可以分离存储库)。

对于 Angular 2,前端

构建系统可能存在差异,但结构应该类似于我用于 Angular 1.x 的结构。

我用来将前端资产放置在一个可以描述为三级流程中的文件夹结构。让我们在这里列举三个级别:

级别 1 - src/AppBundle/Resources/Private文件夹

在这个文件夹中,我放置了任何需要处理的前端资产,如转译、自动前缀、丑陋等。您选择的大多数 JS、SCSS、LESS 或 HTML 文件都是这种情况。您可以定义您喜欢的文件夹结构。

级别 2 - src/AppBundle/Resources/Public文件夹

这将是包含处理后的所有资产以及任何其他不需要处理的资产(通常是图像、字体等)的文件夹。这将是文件夹结构,实际上将被复制到级别 3 中的 web/bundles/app 文件夹中。

注意:此级别确实是多余的,可以谨慎跳过。就我而言,我保留它以避免Symfony默认安装资产的方式发生"事故",这将用这个文件夹的内容替换你的web/bundles/app文件夹。如果您使用以这种方式安装资产的任何其他捆绑包(例如FOSJsRoutingBundle),就会出现这种情况。

级别 3 - web/bundles/app文件夹

这是资产的最终公共目标,也是在代码中引用它们的路径。它只是级别 2 中 src/AppBundle/Resources/Public 文件夹的副本。

构建系统

您将需要一个前端构建系统来转译文件并将其复制到级别 2 和 3 中的相应文件夹中。在我的情况下,对于Angular 1.x,我将Gulp与Node一起使用。这意味着您的项目中将有gulpfile.js file,package.json文件和node_modules文件夹。我不在乎,它工作正常。请记住不要node_modules文件夹添加到存储库。

生产中

除非由于某种原因确实需要在生产中重建,否则您可以跳过级别 1、级别 2 并 gulp 相关的文件夹和文件,如 node_modules、gulpfile.js 等。

您可以将客户端创建为根文档,将服务器端创建为别名位置,但请注意不要覆盖别名。或者您可以更改主机。

示例 1:

[client]   www.example.com/<client_root_dir>
[server]   www.example.com/api/<server_root_dir>

或示例 2:

[client]   www.example.com/<client_root_dir>
[server]   api.example.com/<server_root_dir>