Phoenix App中预编译的单页应用程序

His*_*ako 10 elixir single-page-application phoenix-framework

我有一个预编译的ember.js应用程序(fronted-js-framework在这里不重要),它基本上由一个带有index.html文件的文件夹和一些js/css资产组成.

我把这个文件夹放在我的凤凰应用程序中的/ priv/static下,并试图让路由服务它...到目前为止没有成功.我在凤凰版0.17.1(与1.0 afaik相同).我按顺序尝试了以下步骤:

  • 在endpoint.ex中,我删除了only: ~w(...)过滤器.
  • 通过单个操作实现了一个最小的控制器来提供文件: def index(conn, _params) do redirect conn, to: "/my_app/index.html" end
  • 将控制器添加到我的routes.ex: get "/my_app", MyCustomController, :index

到目前为止,上述步骤均无效,我只得到错误no route found for GET /my_app/index.html.我怎么能解决这个问题?我只想将URL "/my_app"(或者,如果没有其他工作原理"/my_app/index.html")映射到priv/static/my_app/index.html我的凤凰应用程序中的路径.有任何想法吗?

编辑:

我尝试实现的基本工作流程如下:

我有不同的开发人员在其专用文件夹中构建一些ember.js SPA $phoenix_root/apps/.所以我有一个$phoenix_root/apps/my_app带有ember和ember-cli 的开发人员.这个开发人员ember server在开发他的应用程序时使用,并且mix phoenix.server在后台运行,因为phoenix应用程序本身将所需数据公开为RESTful API.

在每个实现的功能,前端开发人员类型之后ember build [...],此任务将整个ember.js前端应用程序编译到一个文件夹中,带有index.html文件和一些资源,并将此文件夹移动到$phoenix_root/web/static/assets/my_app.然后凤凰(或早午餐)触发,并复制这个东西原样$phoenix_root/priv/static/my_app,随时可以提供像任何其他资产.

关键是能够在单个代码库(凤凰应用程序)中构建一堆孤立的"前端"作为自包含的包,而凤凰应用程序本身还有其他(其他)要做的事情.

因为Frontend-Developers每次都自动生成SPA,所以我非常想避免修改新的index.html文件.在性能方面,将这些SPA作为静态文件提供服务是最好的 - 它们在用户浏览器内自行初始化.

我希望这可以为我这样做添加一些说明.

编辑2:

我现在有一个工作解决方案,请参阅我为演示目的创建的示例repo:https://github.com/Anonyfox/Phoenix-Example-Multiple-SPA-Frontends

凤凰应用程序的必要修改:

  • 修改endpoint.ex' Plug.Static以包括SPA及其资产.
  • mix phoenix.server这之后重启!

对ember.js应用程序的必要修改:

  • 添加"output-path": "../../web/static/assets/*my_app*/".ember-cli便利设置,ember build始终使用此路径运行
  • 添加baseURL: '/*my_app*/'locationType: 'none'config/environment.js
  • rm -rf .git 如果你想在一个项目中拥有所有版本的代码(这个问题的目的)

Jos*_*lim 5

您的设置应该正常工作.只有一点需要注意:每次更改内容时lib,都必须重新启动应用程序.

在请求上重新加载代码的唯一目录是web.事实上,这是libweb目录之间的唯一区别.这就是为什么你把长时间运行的进程和主管放在里面lib,因为没有必要重新加载代码,其他一切都进入web.