# EmberCLI：即将出现在您身边的 Discourse！

**URL:** <https://meta.discourse.org/t/embercli-coming-to-a-discourse-near-you/143528>\
**Category:** Development\
**Created:** [2020年三月6日 16:10 UTC](https://meta.discourse.org/t/embercli-coming-to-a-discourse-near-you/143528 "2020-03-06T16:10:51Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![eviltrout](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eviltrout/32/5275_2.png) [@eviltrout](https://meta.discourse.org/u/eviltrout)\
**Post date:** [2020年三月6日 16:10 UTC](https://meta.discourse.org/t/embercli-coming-to-a-discourse-near-you/143528/1 "2020-03-06T16:10:51Z")

</div>

我们计划将 Discourse 的资源管道迁移至 [EmberCLI](https://ember-cli.com/)。EmberCLI 是开发 Ember 应用的标准方式，而 Discourse 当前的做法长期以来让那些具有 Ember.js 背景的新人感到困惑。

### 背景

Discourse 已经存在了很长时间，其诞生早于 EmberCLI。事实上，在当时，使用类似 Rails 资源管道的方式被视为最佳实践。多年来，我们在 Ember 应用上不断叠加更多功能，包括 JavaScript 模块、Babel.js 和源码映射，但我们认为 Rails 资源管道已被推至极限。一些新功能（如 `async/await`）很难集成到当前系统中。

在 Discourse 的下一个主要版本（2.5）中，我们计划迁移到 EmberCLI。这将需要相当长的时间，因此我们将尽力确保前后端应用的两个版本同时可用。勇于尝试的用户可以提前启用 EmberCLI，而其他用户则可以继续使用当前版本，直到我们确认系统稳定为止。

### 路线图

1. 将现有模式迁移到 EmberCLI 模式：我们已在 2.4 版本中初步尝试了部分迁移。基本目标是将我们的 JavaScript 代码逐步调整为与 Ember-CLI 期望的格式高度一致。这包括：

2. 通过 EmberCLI 启动 Discourse：这可能会在修复第（1）步中的问题后引入新挑战，因此需要重复上述方法。

3. 集成主题组件和插件：我们需要进行一些调研，以确保现有扩展能够尽可能无缝地集成到 Discourse 中。

4. 识别任何性能（或其他）瓶颈：新系统应至少与当前系统一样快，甚至更快。

5. 制定切换时间表：时间安排需足够宽松，以便用户有充足时间进行功能测试并提供反馈。

### 优势

完成迁移后，许多当前存在故障或难以实现的功能（如源码映射和 `async/await`）将能够正常工作。

此外，对于仅希望专注于 Discourse 前端部分的开发者，我们或许可以设置一种环境，使他们只需将 EmberCLI 指向类似 [try.discourse.org](http://try.discourse.org) 的服务器，即可在前端应用上进行开发，而无需运行完整的 Ruby/Rails 服务器以及 Redis/Postgres 数据库。

这将是一个庞大的项目，但最终我们的应用将因此变得更加出色！

---

<div class="post-metadata">

**Author:** ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)\
**Post date:** [2020年三月6日 16:18 UTC](https://meta.discourse.org/t/embercli-coming-to-a-discourse-near-you/143528/2 "2020-03-06T16:18:31Z")

</div>

> [@eviltrout](#):
>
> 集成主题组件和插件：我们需要在此进行一些调研，以便将现有扩展尽可能无缝地集成到 Discourse 中。

谢谢 Robin！当然，这一重点对我们来说非常重要。

如果您需要我们测试任何分支，请随时告知。

附：我完全能想象这次迁移需要多少工作量，因此非常感谢您的付出。

---

<div class="post-metadata">

**Author:** ![spirobel](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/spirobel/32/170908_2.png) [@spirobel](https://meta.discourse.org/u/spirobel)\
**Post date:** [2020年三月7日 01:17 UTC](https://meta.discourse.org/t/embercli-coming-to-a-discourse-near-you/143528/3 "2020-03-07T01:17:08Z")

</div>

你们是否也计划最终让 Discourse 插件成为 Rails 插件？那将非常棒！😃 Rails 本身为插件提供了许多生成器。此外，Discourse 是最大的开源 Rails 应用，因此或许将双方的努力结合起来会很有好处。

> [@Rails plugins vs discourse plugins - what is the difference?](https://meta.discourse.org/t/rails-plugins-vs-discourse-plugins-what-is-the-difference/127109):
>
> I want to make a plugin that needs its own tables. So its a good idea to have migration and model generators, because manually copying them from the main app dir will lead to errors and is just not very convenient. So I started making my own generators. I started with the migration generator: I could move on now and do the same for models and controllers. But now I started to read this [Getting Started with Engines — Ruby on Rails Guides](https://guides.rubyonrails.org/engines.html) and now it seems to me that all of this might be a duplic…

---

<div class="post-metadata">

**Author:** ![eviltrout](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eviltrout/32/5275_2.png) [@eviltrout](https://meta.discourse.org/u/eviltrout)\
**Post date:** [2020年三月9日 14:02 UTC](https://meta.discourse.org/t/embercli-coming-to-a-discourse-near-you/143528/4 "2020-03-09T14:02:06Z")

</div>

这是一个不同且更为复杂的请求，不应与此工作相关联。

---

<div class="post-metadata">

**Author:** ![eviltrout](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eviltrout/32/5275_2.png) [@eviltrout](https://meta.discourse.org/u/eviltrout)\
**Post date:** [2020年三月9日 14:32 UTC](https://meta.discourse.org/t/embercli-coming-to-a-discourse-near-you/143528/5 "2020-03-09T14:32:09Z")

</div>

我们将开始合并一些重大的模板代码检查变更。这些变更大多应能“直接生效”，但预计会出现一些回归问题。我们将尽力快速修复这些问题，因此请报告任何异常情况，例如用户界面元素未按预期更新。

---

<div class="post-metadata">

**Author:** ![eviltrout](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eviltrout/32/5275_2.png) [@eviltrout](https://meta.discourse.org/u/eviltrout)\
**Post date:** [2020年三月12日 17:48 UTC](https://meta.discourse.org/t/embercli-coming-to-a-discourse-near-you/143528/6 "2020-03-12T17:48:57Z")

</div>

今天我合并了一个大型提交，将 `app/assets/javascripts/discourse` 文件夹中的所有 `.js.es6` 文件重命名为 `.js`。这是为了符合 Ember CLI 标准的文件命名方式迈出的重要一步。

接下来将支持 `.js` 文件的转译，并弃用 `.es6` 扩展名。

---

<div class="post-metadata">

**Author:** ![fzngagan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/fzngagan/32/259349_2.png) [@fzngagan](https://meta.discourse.org/u/fzngagan)\
**Post date:** [2021年二月10日 08:53 UTC](https://meta.discourse.org/t/embercli-coming-to-a-discourse-near-you/143528/7 "2021-02-10T08:53:44Z")

</div>

嗨 @eviltrout

我刚刚发现了这个。这项工作进展如何？🙂

---

<div class="post-metadata">

**Author:** ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)\
**Post date:** [2021年二月10日 11:05 UTC](https://meta.discourse.org/t/embercli-coming-to-a-discourse-near-you/143528/8 "2021-02-10T11:05:40Z")

</div>

很好。@eviltrout 几天前刚刚合并了这个提交：

> <https://github.com/discourse/discourse/commit/61f5d501cb84ee56a56d89a7efae96b871407d43>
>
> This encompasses a lot of work done over the last year, much of which
> has alrea…dy been merged into master. This is the final set of changes
> required to get Ember CLI running locally for development.
> 
> From here on it will be bug fixes / enhancements.
> 
> Co-authored-by: Jarek Radosz \<jradosz@gmail.com\>
> Co-authored-by: romanrizzi \<rizziromanalejandro@gmail.com\>
> 
> Co-authored-by: Jarek Radosz \<jradosz@gmail.com\>
> Co-authored-by: romanrizzi \<rizziromanalejandro@gmail.com\>

这是朝着这一目标迈出的巨大里程碑。

---

<div class="post-metadata">

**Author:** ![fzngagan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/fzngagan/32/259349_2.png) [@fzngagan](https://meta.discourse.org/u/fzngagan)\
**Post date:** [2021年二月10日 11:08 UTC](https://meta.discourse.org/t/embercli-coming-to-a-discourse-near-you/143528/9 "2021-02-10T11:08:30Z")

</div>

太棒了，对此非常期待。@angus @merefield 也会很喜欢的。❤

---

<div class="post-metadata">

**Author:** ![eviltrout](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eviltrout/32/5275_2.png) [@eviltrout](https://meta.discourse.org/u/eviltrout)\
**Post date:** [2021年二月10日 15:49 UTC](https://meta.discourse.org/t/embercli-coming-to-a-discourse-near-you/143528/10 "2021-02-10T15:49:29Z")

</div>

是的，你现在就可以在开发模式下运行 Ember CLI！等它用起来更顺手一些后，我很快会发布更多内容。

---

<div class="post-metadata">

**Author:** ![fzngagan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/fzngagan/32/259349_2.png) [@fzngagan](https://meta.discourse.org/u/fzngagan)\
**Post date:** [2021年二月11日 13:25 UTC](https://meta.discourse.org/t/embercli-coming-to-a-discourse-near-you/143528/11 "2021-02-11T13:25:08Z")

</div>

> [@eviltrout](#):
>
> 等它用起来稍微不那么粗糙时，我很快会再发更多相关内容。

很期待！🙂
