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

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

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

使用ember-cli(ember-cli.org)。 这是完美的这种情况,因为它可以让你快速原型出你的烬应用程序。 它甚至带有基于expressJS的testing套件和嘲笑服务器。

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

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

只是稍微修饰一下:Ember-cli在构build你的烬宝应用程序时有很好的工作stream程。 尝试ember serve的一个简单的例子。 我提到这一点是因为它涉及到如何将其纳入现有项目的问题(通过项目,我假设您可能指的是工作stream程)。 我通常会纯粹使用ember-cli构buildember项目,并考虑后端(通常是通过Flask或NodeJS公开的REST-API)。 导入应用程序时,我必须关心的是确保我的服务器提供正确的静态dist文件。

我不会推荐使用Ember App Kit(EAK),因为它已经被弃用,而不赞成使用ember-cli。 这真的是..好多了。


好,所以我会尽量在这个答案更完整。 让我们从这个孤立的问题开始 – ember-cli或eak ? 肯定是Ember-Cli,但为什么?

  1. EAK正式进入贬值状态,赞成烬类。
  2. Ember-cli生成更多结构化,更清洁,可维护的余烬代码。
  3. Ember-cli集成了您的整个应用程序工作stream程。
  4. 通过bower install --saveBrocfile.js editspipe理所有types的依赖关系和资产。 (请参阅“财富”的解释)

现在问题中比较复杂的部分。 如何将其与现有工作stream程相集成? 我最近在构build一个包含webrtc的应用程序时遇到了这个问题。 恰巧这是我第一次真正使用烬。 所以,还没有意识到我的新锤子的全部潜力,我写了REST API,后端ORM层,信令服务,会话caching,并且首先构build了一个完整的CI工作stream程。 然后,我准备build立我的余烬应用程序,并在您的确切位置结束。

为了简化一个长长的故事 – 我学到的教训是,我应该像对待一个完全不同的问题一样对待我的应用程序应用程序 。 我的意思是 – 这是我的后端(NodeJS,Apache,Nginx等等),我在这里编写的代码是单独构build,testing和集成的。 它通常甚至生活在自己的git仓库中。 我的前端方程是一个单独的问题,通常由几个部分组成。 我的电话本地应用程序将有自己的工作stream程从构build到testing,并通过REST API集成到我的后端。 另一个我的Android本机应用程序 我的networking应用程序。 对于所有的意图和目的,在我的工作stream程中,这些都是完全独立的工作stream程,当我们开始谈论持续集成时,这些工作stream程只能连在一起。

对于你为什么要这样做有很多争论。 最重要的是 – 规模。

ember-cli的美妙之处在于,它使得为您的应用程序应用程序工作stream程变得相当简单,并且在新的框/实例上重新部署您的应用程序+工作stream程。 我肯定会推荐参考官方的ember-cli设置说明,但是我会把它们包含在这里,以防URL有一天变坏:

没有真正的,请参阅我的指示将吸收比较的链接…

Deploying a new Ember App

  1. 通过sudo apt-get install nodejssudo apt-get install npmsudo apt-get install git ,在你的系统上sudo apt-get install nodejs ,NPM和Git(ember-cli将作为默认的加载git)

注意:在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. 创build新的ember-cli应用程序: cd <Desired Directory> ,使用ember new my-app-name

现在你可以看看ember help开始学习如何使用烬。 提示: – 红旗标志是你的朋友 。 你会注意到,当你安装余烬cli所有的脚手架照顾你。 你会看到你可以添加简单的ember generate命令的东西,他们不仅会创build所需的对象,而且testing文件。 最重要的是,使用ember serve你可以开始脚手架你的应用程序,并通过简单的标志,你可以configurationtesting服务器,以实际代理和使用已经存在的REST API(如果你有)或expressJS mocks服务器来build立一个psuedo- API。

把它和你的更大的工作stream程整合在一起就是configuration你使用的任何工具(我使用Jenkins和Ansible来处理这种东西)的一个简单的事情,把dister文件夹分发到应该作为静态内容的地方(最终它只是一个单一的web应用程序)。

如果你想改用一个现有的在独立工作stream程中运行的ember-cli应用程序,并且已经使用了大部分的好东西来获得一些熟悉的东西 – 正如我怀疑你很快就会意识到如何适应你的目前的结构是 – 随意克隆和玩这个在这里 。

最后,为了回答更具体的问题,我们可以把它分解成两个类别。 当我们谈论src的时候 – 我会把它放在自己的“结构”中,至less要把它们放在一个单独的子目录中。 当我们正在构build和交付的时候,我会把/ dist文件夹的内容包含在你想要为你的呃应用程序提供服务的静态Web服务器目录中。

编辑:我添加了一些更多的细节 – 希望有用的细节下面的换行符。 让我知道你是否有更多的问题,或者如果我能更好地解释什么。

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