ruby-on-rails - 使用 webpack 在 rails 6 视图中导入单个 css 文件的最佳方法
问题描述
所以我已经用标签导入了 application.scss
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
<%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
它有效
但是我想分离我的 css 文件并在特定视图中调用它们,例如在 home/index 视图调用中
<%= javascript_pack_tag 'home/index', 'data-turbolinks-track': 'reload' %>
<%= stylesheet_pack_tag 'home/index', media: 'all', 'data-turbolinks-track': 'reload' %>
我实现了这一点,创建了一个单独的 js 文件,例如 home.js 并在里面像这样导入我的 home.scss
import '../../stylesheets/home/index'
我的问题是,这是正确的方法吗?
我总是必须创建一个 js 文件来导入我的 css 文件吗?
有更好的方法吗?
解决方案
是的,这是可能的。您不需要创建单独的 JS 文件,只需为每个视图创建一个 CSS“包”:
app/javascript
└── packs
├── application.js
└── home.scss
在您看来:
<%= javascript_pack_tag 'home', 'data-turbolinks-track': 'reload' %>
<%= stylesheet_pack_tag 'home', media: 'all', 'data-turbolinks-track': 'reload' %>
演示应用程序,更改分支:https ://github.com/rossta/rails6-webpacker-demo/compare/example/css-pack
注意事项:
在 Webpacker 5 中通常不建议 (a) 每个页面使用多个“包”(例如“应用程序”和“主页”)。Webpack 无法知道您想要在包之间共享代码,除非您添加特殊配置来这样做(见脚注)。我上面的回答假设您没有跨包复制导入(或者您可以复制)。
Webpack 仍然会创建一个 JavaScript 包来加载你的 CSS 包,所以你仍然需要
javascript_pack_tag
两者stylesheet_pack_tag
一个。您可以使用splitChunks
API(Webpacker 5 文档,在 Webpacker 6 中默认启用)跨包共享代码。
推荐阅读
- python - 如何分隔字典的值以便它们可以打印在不同的列中?
- tensorflow - 错误:ValueError:没有为任何变量提供梯度:['dense/kernel:0', 'dense/bias:0', 'dense_1/kernel:0', 'dense_1/bias:0']
- javascript - 使用 Javascript 提取页面变体值
- javascript - 防止在悬停时移动 +1px 字体大小的文本元素
- maxent - read.table 中的 MaxentVariableSelection 错误(file = file,header = header,sep = sep,quote = quote,:输入中没有可用的行
- python - ModuleNotFoundError:导入时间停止;当 Object 超出范围时,sys.modules 中没有发生(__del__)
- javascript - Visual Studio Code 不会从库根目录自动导入
- node.js - 自动化一系列 shell 命令(sed 和节点脚本)
- c++ - R值可以等于nullptr吗
- next.js - 在 ApolloClient 中为每个请求设置授权标头