如何将Ember包含到现有的Node / Express.js应用程序中

时间:2014-05-14 18:29:43

标签: node.js ember.js express

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

只需点缀一下:Ember-cli在构建你的余烬应用程序时有很棒的工作流程。试试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生成更结构化,更清洁,可维护的余烬代码。
  3. Ember-cli整合了您的整个ember-app工作流程。
  4. 通过bower install --saveBrocfile.js edits简化管理所有类型的依赖关系和资产。 (参见ember-cli docus的解释)
  5. 现在问题中更复杂的部分。如何将其与现有工作流程集成?我最近在构建包含webrtc的ember应用程序时遇到了这个问题。碰巧这是我第一次真正使用ember。因此,我还没有意识到我的新锤子的全部潜力,我编写了REST API,Backend ORM层,信令服务,会话缓存,并首先构建了完整的CI工作流程。然后我准备构建我的余烬应用程序并最终确定你的位置。

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

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

    ember-cli的美妙之处在于,为您的ember应用程序提供工作流程并轻松地在新的盒子/实例上重新部署app +工作流程变得相当简单。我当然会推荐referring to the official ember-cli setup instructions,但我会在这里将它们包含在内,以防有一天网址变坏:

    不是,请参阅我的说明中的链接,比较......

    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)。
    2. 注意:在Ubuntu 14.04和其他一些Debian系统上使用sudo apt-get install nodejs-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

      3. 现在您可以查看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时 - 我会把它放在它自己的&#34;结构&#34;中,至少通过在它自己的一个单独的子目录中分开。当我们谈论构建和可交付时,我会将/ dist文件夹的内容包含在您希望为其提供的ember应用程序的任何静态Web服务器目录中。

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

答案 1 :(得分:0)

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

相关问题