Rails 5.2+:为什么仍然在webpacker中使用资产管道?

Dan*_*n L 5 javascript ruby-on-rails webpack

我正在阅读Rails webpacker gem文档,其中说:

Webpacker使使用JavaScript预处理器和捆绑程序webpack 4.x.x +轻松管理Rails中类似应用程序的JavaScript。它与资产管道共存,因为webpack的主要用途是类似应用的JavaScript,而不是图像,CSS甚至JavaScript Sprinkles(所有这些都继续存在于应用/资产中)。

但是,也可以将Webpacker用于CSS,图像和字体资产,在这种情况下,您甚至不需要资产管道。仅在使用基于组件的JavaScript框架时,这才最重要。

我试图了解背后使用的基本原理对CSS /图像/ JS-洒旧资产管道如果webpacker能够处理这一切?

我读过其他一些文章,这些文章引导我逐步使用webpacker,但我不理解此决定的原因。

这是否只是为了支持旧版应用程序,最终旧的资产管道将消失,而webpacker将用于Rails应用程序中的所有内容?

Leo*_*sov 7

作为Webpacker之前存在的应用程序的维护者,我可以给你一个原因:

很难将现有前端从Sprockets迁移到Webpack。

Sprockets将所有JS生成一个具有共享范围的大文件。Webpack隔离了每个JS模块的范围。要迁移到Webpack,您需要确保您的代码仍可与范围隔离一起使用。

这通常是有问题的,因为在Sprockets时代,您也没有正确的JS需求,并且不得不依靠全局变量或顶级变量在JS源文件之间共享代码和数据。

Rails并未提供从Sprockets编译到Webpack的轻松过渡路径。因此,它必须同时支持。

但是要回答您的其他问题,如果您有足够的JS值得使用,则应该使用Webpacker 。

如果您的前端很简单,那么在使用Sprockets时,您将跳过一些JS讨厌的事情。就像您要向应用程序中添加10行JS一样,您可能不希望通过依赖项管理node_modules等来设置整个JS环境-这是使用Webpack / Webpacker的代价。如果只需要编译CSS并将摘要添加到图像文件名中,那么管理JS环境将变得更加毫无意义-Sprockets完全能够胜任,而无需package.json与JS相关的任何其他东西。

因此,还有第二个原因:

Webpacker非常适合具有大量前端代码库的应用程序。Sprockets非常适合在传统的服务器呈现的应用程序中添加一些JavaScript,以及完全不使用JavaScript的应用程序。