SuperAPI AI 工具集

propshaft

通用与其它

查看项目

更新于 10-15 23:57

技能介绍

用途:面向 Rails 8+ 应用,指导使用 Propshaft 管理资源。Propshaft 是极简资源管道,文件直接提供,不做编译、打包或转换,核心工作是给文件加指纹以做缓存失效。

主要能力与约定:app/assets/stylesheets 下每个 .css 文件都可直接提供,无需 manifest.js 或 //= require;子目录按路径提供。CSS 用 @layer 控制层叠顺序,例如在 application.css 声明 @layer reset, base, components, utilities;,各文件用 @layer 包裹。设计令牌用 CSS 自定义属性,暗色模式可用 light-dark()。布局中用 stylesheet_link_tag :app 加载应用样式,避免 :all(会带入引擎 CSS);第三方 CSS 先于 :app 加载以便覆盖。视图中用 image_tag、asset_path 等;CSS 中用根相对路径 url("/icons/check.svg"),预编译时会重写为带指纹的 /assets 路径;JS 中可用 RAILS_ASSET_URL 宏。JavaScript 由 importmap-rails 管理,与 Propshaft 互补。

使用方式:生产环境运行 RAILS_ENV=production rails assets:precompile(可加 SECRET_KEY_BASE_DUMMY=1),会复制资源、加指纹、重写 url() 并生成 .manifest.json。CDN 可设 config.asset_host;缓存头可在 Nginx/Apache 或 config.public_file_server.headers 配置。新增样式只需创建文件并包在 @layer 中,无需更新清单。调试可用 bin/rails assets:reveal、assets:clobber。

限制与常见错误:不要使用 //= require、image-url()、asset-url() 等 Sprockets/Sass 写法,Propshaft 会忽略并当作字面文本;不要期待 Sass 编译,需另加 cssbundling-rails 或 dartsass-rails;不要在开发环境预编译,否则 .manifest.json 会冻结资源,需 assets:clobber 清除。从 Sprockets 迁移的完整清单见该技能目录的 reference.md。