2017年8月30日,星期三

Webpacker 3.0:无需单独进程,配置更少

由 dhh 发布

通过Webpacker的第三个主要版本,我们让在Rails中Webpack的使用变得更加容易。两大主要变化是:开发环境中不再需要单独的进程,并且绝大多数配置现在都位于Webpacker npm包中,这样您的config/目录就能保持整洁,更新也更容易。

我们通过允许Webpacker在开发和测试环境中按需编译,从而消除了对单独进程的需求。我们已经做了大量工作来加速这个过程,对于许多应用程序来说,性能已经足够。但如果您有一个庞大的应用程序,或者您喜欢实时重新加载或热模块替换,您仍然可以使用bin/webpacker-dev-server。Webpacker会自动检测此进程是否正在运行,并从中提供包,而不是按需提供。非常智能。

我们还大大减少了Rails config/目录中生成的配置样板代码量。所有标准内容现在都包含在Webpacker npm模块中,这使得升级更加容易。而且您仍然可以根据需要覆盖任何默认设置。所以总的来说这是一次重大的胜利。

此外,我们将所有编译和覆盖逻辑从Rake任务移到了Webpacker单例实例本身。这使得在自定义设置中使用Webpacker更加容易,例如,如果您不使用Yarn,或者有不同于assets:precompile的部署策略。

这得益于对Webpacker内部的大规模重构。原先的许多单独单例已被一个顶层单例取代,该单例聚合了用于配置编译等的普通类集合。

Webpacker 3.0预示着Rails 6.0中一种默认使用Webpack的策略可能会是什么样子。其中,资产管道专注于静态资产,如图像、字体、声音和编译后的CSS,使用SASS等,但退出JavaScript编译领域。我们尚未确定最终方案,但这已是我们目前对在下一个Rails大版本中如何分割JavaScript、样式表和其他资产处理工作负载的最佳设想。

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

如果您正在寻找在Rails中使用React、Vue、Angular或Elm,Webpacker将使整个过程变得更加容易。我们仍然为这四个框架提供了一些“Hello World”生成器,因此您可以开始开发,无需手动进行繁琐的配置。

这个主要的新版本有很多贡献者,但我特别要感谢Gaurav TiwariJavan Makhmali的巨大且持续的贡献。祝您使用愉快!