星期三,2017 年 8 月 30 日

Webpacker 3.0:不需要一个单独的过程,生成的配置更少

发布者 dhh

我们刚刚使使用 Webpack 搭配 Rails 变得更简单,这是 Webpacker 的第三个主要版本。两个重大变更是不再需要一个单独的过程进行开发以及现在绝大多数配置都存在于 Webpacker npm 包 中,因此你的 config/ 目录保持简洁,而且更新也更容易了。

我们通过允许 Webpacker 在开发时按需编译(同样适用于测试)去掉了对单独的过程的需求。我们投入大量精力来加速这一过程,对于很多应用,其性能都将非常不错。但是,如果你有一个巨大的应用,或者你更喜欢实时重新加载或热模块更换,你仍然可以使用 bin/webpacker-dev-server。Webpacker 将自动检测此过程是否正在运行并从该服务器提供服务包而不是按需提供。真的非常棒。

我们还显著减少在 Rails config/ 目录中生成的配置样板的数量。所有标准内容现在都存在于 Webpacker npm 模块中,这使升级变得容易得多。你仍可以随意覆盖所有默认选项。因此,这是全面的大胜利。

此外,我们已将所有的编译和填充逻辑从 Rake 任务中移出,并移入了 Webpacker 单例实例 本身。这使得在定制设置中更易于使用 Webpacker,例如如果不使用 Yarn 或有除 assets:precompile 之外的不同的部署策略时。

这是重构 Webpacker 内部所带来的。那许多独立的单例已不复存在,取而代之的是一个单一的顶级单例,单单聚合了一组用于 配置编译 等等的普通类。

Webpacker 3.0 指出默认启用 Webpack 的策略在 Rails 6.0 中可能是什么样的。该管道针对静态资产(例如,图像、字体、声音和编译的 CSS,使用 SASS 等),但退出 JavaScript 编译。我们仍未确定最终做法,但这是我们当前在下一版重大 Rails 版本中分担处理 JavaScript、样式表和其他资产的工作负载的最佳策略。

如果您还未尝试过 Webpack、ES6 风格的 JavaScript 以及所有其他现代化改进功能以客户端开发体验,那么 Webpacker 3.0 是一个很好的起点。在 Basecamp,我们已经在生产中使用它,即使我们不使用任何大型 JavaScript 客户端框架。它也能与 Turbolinks + Action Cable + 原生 JS 方式一起很好地发挥作用。

如果您希望将 React、Vue、Angular 或 Elm 与 Rails 一起使用,Webpacker 使整个过程变得容易得多。我们仍然为这四个框架准备了许多 Hello World 生成器,因此您可以开始开发,而不必进行任何繁重的配置手动操作。

此重大新版本有许多贡献者,但我要特别感谢 Gaurav TiwariJavan Makhmali 为此做出的持续的大量贡献。尽情享受吧!