前提条件
以下是我在本教程中使用的工具。较旧的版本可能也可以,但我没有尝试。
$> ruby --version
=> 3.0.0
$> rails --version
=> 6.1.3
$> node --version
=> 14.15.1
$> yarn --version
=> 1.22.10
1.创建新的Rails应用程序
$> rails new myapp && cd myapp
现在等一下......好吧!你现在有一个新的默认Rails应用程序。
2.建立一个欢迎页面
在app/controllers/welcome_controller.rb中创建一个控制器,如下所示
# inside app/controllers/welcome_controller.rb
class WelcomeController < ApplicationController
end
在config/routes.rb中配置一个默认路由,如下所示
# inside config/routes.rb
Rails.application.routes.draw do
get "welcome/index"
root to: "welcome#index"
end
现在我们要把这个简单的例子变得足够复杂😬,以确保所有的CSS、JavaScript组件都能工作。
不要担心,只要把下面的代码复制/粘贴到app/views/welcome/index.html.erb中即可。
<!-- inside app/views/welcome/index.html.erb -->
<div class="collapse" id="navbarToggleExternalContent">
<div class="bg-dark p-4">
<h5 class="text-white h4">Collapsed content</h5>
<span class="text-muted">Toggleable via the navbar brand.</span>
</div>
</div>
<nav class="navbar navbar-dark bg-dark">
<div class="container-fluid">
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarToggleExternalContent" aria-controls="navbarToggleExternalContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
</div>
</nav>
<main>
<section class="py-5 text-center container">
<div class="row py-lg-5">
<div class="col-lg-6 col-md-8 mx-auto">
<h1 class="fw-light">Album example</h1>
<p class="lead text-muted">Something short and leading about the collection below—its contents, the creator, etc. Make it short and sweet, but not too short so folks don’t simply skip over it entirely.</p>
<p>
<a href="#" class="btn btn-primary my-2">Main call to action</a>
<a href="#" class="btn btn-secondary my-2">Secondary action</a>
</p>
</div>
</div>
</section>
</main>
通过运行确保该应用程序工作
$/myapp> bin/rails server
并在你的浏览器上打开localhost:3000

原始图片,Bootstrap v5还没有安装
好的,到目前为止没有风格。
3.选择一个前端管理器
由于历史原因,Rails 6有两个不同的工具来管理前端资产(CSS、JavaScript、图片等)。旧的名为 "Sprokets",在Rails范围之外使用不多。新的工具被命名为 "Webpacker",它依赖于成熟的、广泛使用的Webpack。因此,我不建议新项目再使用Sprockets,特别是自webpacker的第5版以来。它要稳定得多,而且可以处理多个包。
确保你的Gemfile至少包括webpacker的第5个版本。
gem 'webpacker', '~> 5.0'
如果没有,就按上面的方法包括第5版,然后运行 "bundle install"。
现在我们希望webpacker能够处理我们所有的资产,而不仅仅是JavaScript。将app/javascript 改名为app/frontend ,像这样。
$/myapp> mv app/javascript app/frontend
在webpacker.yml中,警告webpack,我们改变了assets文件夹的名称。
# Inside webpacker.yml, first lines
default: &default
source_path: app/frontend # Change here
4.安装Bootstrap v5
添加最新的Bootstrap版本,以及PopperJs(一个必须的依赖),如下所示。
$/myapp> yarn add bootstrap@5.0.0-beta2
$/myapp> yarn add @popperjs/core@2.0.0-alpha.1
5.将Bootstrap注入到你的应用程序中
5a) 注入Boostrap的JS文件
创建JS文件:app/frontend/js/bootstrap_js_files.js,并导入Bootstrap相关的JS文件,如下所示。
$/myapp> mkdir app/frontend/js && touch app/frontend/js/bootstrap_js_files.js
// inside app/frontend/js/bootstrap_js_files.js
// import 'bootstrap/js/src/alert'
// import 'bootstrap/js/src/button'
// import 'bootstrap/js/src/carousel'
import 'bootstrap/js/src/collapse'
import 'bootstrap/js/src/dropdown'
// import 'bootstrap/js/src/modal'
// import 'bootstrap/js/src/popover'
import 'bootstrap/js/src/scrollspy'
// import 'bootstrap/js/src/tab'
// import 'bootstrap/js/src/toast'
// import 'bootstrap/js/src/tooltip'
注意,我们并没有导入所有Bootstrap的JS文件,我们只导入项目所需的文件(用于导航条)。
现在把这个文件导入主JS文件app/frontend/packs/application.js中。
// inside app/frontend/packs/application.js
// Add this line
import '../js/bootstrap_js_files.js'
5b) 注入Bootstrap的样式
创建主CSS文件
$/myapp> touch app/frontend/packs/application.scss
在里面,导入Bootstrap
// inside app/frontend/packs/application.scss
// Just a quick ugly style to see if our CSS works
h1 {
text-decoration: underline;
}
// Import Bootstrap v5
@import "~bootstrap/scss/bootstrap";
现在告诉Rails你的主CSS文件在哪里,在app/views/layouts/application.html.erb里面。
<!DOCTYPE html>
<html>
<head>
<title>Myapp</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<!-- Warning !! ensure that "stylesheet_pack_tag" is used, line below -->
<%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
</head>
<body>
<%= yield %>
</body>
</html>
5c) 检查所有工作
停止你的Rails服务器。我们已经改变了很多前端资产,所以在重启Rails服务器之前,我们要做一些清理/重新编译的工作。
$/myapp> bin/rails assets:clobber
$/myapp> bin/rails webpacker:compile
$/myapp> bin/rails server
并在localhost:3000处打开浏览器。
- 如果风格看起来像Bootstrap,那就好了 !我们对Bootstrap的CSS文件的导入已经成功。
- 如果点击汉堡包菜单意味着切换导航条,那就好了!我们对Bootstrap的CSS文件进行了导入。我们对Bootstrap的JS文件的导入已经成功了。

它成功了!
6 更多内容
鉴于得到这个结果所涉及的步骤之多,今天就到此为止。不过,我想补充的是:
- 如何复制/粘贴SCSS文件以获得深度的Bootstrap定制。
- 如何管理图片
- 如何管理字体
- 如何优化资产
- 可能还有其他我现在没有想到的东西。敬请期待