javascript - Rails 5.2+:为什么仍然使用带有 webpacker 的资产管道?
问题描述
我正在阅读Rails webpacker gem 文档,其中说:
Webpacker 使得使用 JavaScript 预处理器和打包器 webpack 4.x.x+ 来管理 Rails 中类似应用程序的 JavaScript 变得很容易。它与资产管道共存,因为 webpack 的主要目的是类似于应用程序的 JavaScript,而不是图像、CSS 甚至 JavaScript Sprinkles(所有这些都继续存在于应用程序/资产中)。
但是,也可以将 Webpacker 用于 CSS、图像和字体资产,在这种情况下,您甚至可能不需要资产管道。当专门使用基于组件的 JavaScript 框架时,这主要是相关的。
如果 webpacker 能够处理所有这些,我试图了解使用 CSS/images/JS-sprinkles 的旧资产管道背后的基本原理?
我已经阅读了一些其他文章,这些文章引导我使用 webpacker 完成所有这些操作,但我不明白这个决定背后的原因。
这是否只是为了支持遗留应用程序,最终旧资产管道将消失,而 webpacker 将用于 Rails 应用程序中的所有内容?
解决方案
作为 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 的应用程序。
推荐阅读
- android - 如何在 Flutter 中设置一个 Button 或 Text Widget 在屏幕底部
- pandas - Python - 对列进行升序排序 - 使用 groupby
- javascript - 功能代码未按正确顺序执行,异步等待执行错误
- firebase - Flutter Firebase 身份验证:恢复为特定匿名用户
- c# - 如何在asp.net mvc中传递数组值?
- c - 系统调用可以发生在 C 程序中吗?
- go - 如何正确测试错误对象?
- cython - 如何在cython中提供cpp类析构函数成员信息
- python - 用python重构JSON数据
- jquery - jQuery在点击时获取每个复选框的值