【问题标题】:How to include Ember into an existing Node/Express.js App如何将 Ember 包含到现有的 Node/Express.js 应用程序中
【发布时间】:2014-05-14 18:29:42
【问题描述】:

我正在努力将 Ember 包含到已部署的 Node/Express/EJS 应用程序中。我不想破坏任何现有的应用程序行为,而是想使用 Ember 为应用程序构建任何附加功能。这些新功能的服务器端代码已经构建,每个端点都返回 Ember Data 期望的 JSON 格式。我一直在研究 Ember App Kit 和 Ember-cli,但我不确定如何将这些工具包含到我现有的目录结构中,我不确定这些工具是否适合我的用例。有人对这个特定用例有任何经验吗?

例如,导航到 /foo 会返回呈现 ejs 模板的现有快速路由,但 /bar 将是到达同名 api 端点的 Ember 路由。

【问题讨论】:

    标签: node.js ember.js express


    【解决方案1】:

    使用 ember-cli (ember-cli.org)。它非常适合这种情况,因为它允许您快速制作 ember 应用程序的原型。它甚至带有一个基于 expressJS 的测试套件和模拟服务器。

    一旦您准备好将其合并到您的 NodeJS、Flask 或任何其他应用程序中,所有静态文件都应该在 ember-cli dist 目录中可用。

    只是不要忘记在移植之前构建 ember-cli 项目,通过ember build 的方式。之后,只需将 ember 项目 dist 文件夹中的文件移动到环境中所需的任何位置即可。

    只是为了修饰一下:Ember-cli 有一个很棒的工作流程,可以在构建您的 ember 应用程序时使用。试试ember serve 一个简单的例子。我提到这一点是因为它说明了如何将其合并到现有项目中的问题(按项目,我假设您可能指的是工作流)。我通常会纯粹使用 ember-cli 构建 ember 项目,并将后端(通常是通过 Flask 或 NodeJS 公开的 REST-API)视为一个单独的问题。导入应用程序时,我只需要确保我的服务器提供正确的静态 dist 文件。

    我不建议使用 Ember App Kit (EAK),因为它已被 ember-cli 弃用。真的……好多了。


    好的,所以我将尝试在此答案中更完整。让我们从孤立的问题开始 - ember-cli 还是 eak?肯定是 Ember-Cli,但为什么呢?

    1. EAK 将正式弃用以支持 ember-cli。
    2. Ember-cli 生成更结构化、更简洁、可维护的 ember 代码。
    3. Ember-cli 集成了您的整个 ember-app 工作流程。
    4. 通过bower install --saveBrocfile.js edits 可以轻松管理所有类型的依赖项和资产。 (解释见 ember-cli 文档)

    现在是问题中更复杂的部分。如何将其与现有工作流程集成?我最近在构建包含 webrtc 的 ember 应用程序时遇到了这个问题。碰巧这也是我第一次真正使用 ember。所以,我还没有意识到我的新锤子的全部潜力,我编写了 REST API、后端 ORM 层、信号服务、会话缓存,并首先构建了一个完整的 CI 工作流。然后我准备好构建我的 ember 应用程序并最终进入了你的确切位置。

    长话短说 - 我学到的教训是我应该将我的 ember-cli 应用视为一个完全独立的问题。我的意思是——有我的后端(NodeJS、Apache、Nginx……等等),我在这里编写的代码是单独构建、测试和集成的。它通常甚至存在于自己的 git 存储库中。这是我的前端方程的一个单独问题,它通常由几个组件本身组成。我的 I-Phone Native 应用程序将有自己的工作流程,从构建到测试并通过 REST API 集成到我的后端。我的 Android 原生应用程序另一个。我的网络应用程序另一个。出于所有意图和目的,在我的工作流程中,这些都是完全独立的工作流程,只有在我们开始讨论持续集成时才会联系在一起。

    对于您为什么要这样做有很多争论。最重要的是 - 它可以扩展。

    ember-cli 的美妙之处在于,它使为您的 ember 应用程序运行的工作流程变得相当简单,并且在新的盒子/实例上重新部署您的应用程序 + 工作流程变得简单。我当然会推荐referring to the official ember-cli setup instructions,但我会将它们包括在此处,以防有一天 URL 变坏:

    不是真的,参考链接我的说明会比较糟糕......

    Deploying a new Ember App

    1. 通过sudo apt-get install nodejssudo apt-get install npmsudo apt-get install git 在您的系统上安装 NodeJS、NPM 和 Git(ember-cli 将作为默认加载 git 用于新应用程序)。

    注意:在 Ubuntu 14.04 和其他一些 Debian 系统上使用 sudo apt-get install nodejs-legacy 代替。如果有疑问,请使用 legacy。如果你在安装后使用node 命令遇到问题,那肯定是你需要使用nodejs-legacy。不要费心尝试手动进行链接。

    1. 全局安装所需的节点模块:sudo npm install -g ember-clisudo npm install -g bowersudo npm install -g phantomjs

    2. 创建新的 ember-cli 应用:cd <Desired Directory>ember new my-app-name

    现在您可以查看ember help 以开始学习如何使用 ember-cli。 提示:--dry-run 标志是你的朋友。您会注意到,当您安装 ember-cli 时,所有的脚手架都已为您处理好了。您将看到您可以使用简单的ember generate 命令添加内容,它们不仅会创建所需的对象,还会创建测试文件。最重要的是,使用ember serve,您可以开始搭建您的应用程序,并通过简单的标志您可以配置测试服务器以实际代理并使用您已经存在的 REST API(如果有的话)或 expressJS 模拟服务器来构建一个伪-API。

    从这里将它与您更大的工作流程集成是一件简单的事情,只需配置您使用的任何工具(我使用 Jenkins 和 Ansible 来处理这类东西)将 ember-cli 的 dist 文件夹分发到应该提供服务的位置作为静态内容(它最终只是一个单页 webapp)。

    如果您想改用现有的 ember-cli 应用程序,该应用程序在独立的工作流程中运行,并且已经利用了大多数好东西来获得一些熟悉感 - 因为我怀疑您会很快意识到如何适应它进入您当前的结构 - 随意克隆和使用this one here

    最后,为了回答更具体的问题,即它如何适应现有的目录结构,我将把它分为两类。当我们谈论 src - 我会将它放在它自己的“结构”中,至少通过位于它自己的单独子目录中来分隔。当我们谈论构建和交付时,我会将 /dist 文件夹的内容包含在您想要为您的 ember 应用程序提供服务的任何静态 Web 服务器目录中。

    编辑:我添加了更多细节 - 希望在换行符下方有用的细节。如果您有更多问题或者我是否可以更好地解释,请告诉我。

    【讨论】:

    • 我觉得这不足以回答这个问题。问题指出“将这些工具包含到我现有的目录结构中”。我认为这意味着能够以“同构”样式直接将 Ember-CLI 与现有 Express 应用程序一起使用。如果您可以更多地谈论您如何使用您的方法进行持续开发,以及更多关于工作流程的详细信息,那可能会很有趣。
    • Hrm,让我想想如何更好地解释其中的一些内容,一旦合适的灵感来袭,我会更新。 ember-cli 提供的工作流程非常完整。构建(使用特定于环境的配置)、测试、完整的“脚手架”(包括测试文件)和一个如此完整的内置测试服务器,我重新设计了我的工作流程以利用 ember-cli 提供的所有功能。这就是说,从技术栈的角度来看,ember-cli 并不适合真正的 src 形式的同构样式,但它是一个解耦的工作流,可以很容易地与全栈 CI 集成。
    【解决方案2】:

    我也面临着类似的情况。我计划在单独的项目文件夹中使用 EAK 作为“原型设计工具”。然后使用 grunt dist 从 EAK 构建分发目录并将其插入到我的主要 Node.js 项目的 assets 文件夹中。

    【讨论】:

    • EAK 已被弃用,取而代之的是 ember-cli
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 2021-09-06
    • 2021-11-26
    • 2016-09-25
    • 1970-01-01
    • 2020-11-25
    相关资源
    最近更新 更多