如何使用 Rubymine 将 JavaScript 导入到 RoR 项目中?

How to import JavaScript into RoR project with Rubymine?

我在 Ruby 我的 RoR 项目中使用 JQuery 时遇到问题。我是 Rails 上 Ruby 的新手,希望在我的项目中使用 bootstrap-sass。 我遵循了 here 中的说明,这是 Github bootstrap 存储库。我正在使用 rails6.0.0.

我的 application.html.erb 中有以下片段:

<nav class="navbar navbar-default navbar-static-top" role="navigation">
  <div class="container">

    <div class="navbar-header">
      <button class="navbar-toggle" type="button" data-toggle="collapse" data-target="#main-nav-collapse">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <%= link_to 'SaaS', root_path, class: 'navbar-brand' %>
    </div>

    <div class="collapse navbar-collapse" id="main-nav-collapse">
      <ul class="nav navbar-nav navbar-right">
        <li><%= link_to "Login", '#' %></li>
      </ul>
    </div> <!--      /.navbar-collapse-->
  </div>
</nav>

当宽度低于大约 600px 时会生成一个导航栏按钮,但是,当我单击它时,它不会给我折叠列表。所以我假设问题出在 JQuery 支持上。

这些是我为 JQuery 支持导入的 gem。

gem 'jquery-rails'
gem 'bootstrap-sass', '~> 3.4.1'
gem 'sassc-rails', '>= 2.1.0'

我的 application.scss 中的导入:

@import "bootstrap-sprockets";
@import "bootstrap";

我的 application.js 的需求语句:

require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")
//= require jquery
//= require bootstrap-sprockets

我已经重启了我的服务器好几次 运行 bundle install。我也没有在 运行 服务器或单击按钮时出现任何错误。

编辑: 将 require 语句添加到 application.js 时,指定的目录 here 与我的 application.js 目录不同。

指令中的目录app/assets/javascripts/application.js。 我的目录 app/javascript/packs/application.js。 我创建了说明中要求的目录,并将要求语句放在那里。

除了将 jquery-railsbootstrap-sass gem 添加到 Gemfile 并将导入添加到 application.scss 文件之外,您还需要包含 jquery 和bootstrap 在 application.js 文件中。如果您清楚地完成这些步骤,docs 中也会提到这些步骤。

application.js

//= require jquery
//= require bootstrap-sprockets

如果您正在使用 sass,请确保删除在新 rails 项目中生成的默认 application.css 文件。

好的,所以在 rails 6 中你会注意到 javascript 文件夹的使用 app/javascript 这意味着你对 JS 所做的任何事情都应该从那里完成。这些对 gems 的依赖现在最小并被 yarn 取代。

你缺少的是纱线安装。

这是我喜欢使用的过程,我根据前一段时间在媒体上阅读的内容进行了修改

# app/javascript/packs/application.js
import '../stylesheets/application'


# app/views/layouts/application.html.erb
<%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>

在控制台中运行

yarn add bootstrap@4.3.1 jquery popper.js

然后

# config/webpack/environment.js
...
const webpack = require('webpack')
environment.plugins.append(
  'Provide',
  new webpack.ProvidePlugin({
    $: 'jquery',
    jQuery: 'jquery',
    Popper: ['popper.js', 'default']
  })
)
...

然后

# app/javascript/packs/bootstrap_custom.js
import 'bootstrap/js/dist/alert'
import 'bootstrap/js/dist/button'
import 'bootstrap/js/dist/carousel'
import 'bootstrap/js/dist/collapse'
import 'bootstrap/js/dist/dropdown'
import 'bootstrap/js/dist/index'
import 'bootstrap/js/dist/modal'
import 'bootstrap/js/dist/popover'
import 'bootstrap/js/dist/scrollspy'
import 'bootstrap/js/dist/tab'
import 'bootstrap/js/dist/toast'
import 'bootstrap/js/dist/tooltip'
import 'bootstrap/js/dist/util'

并且 link 它在你的 app/javascript/packs/application.js 文件中。

# app/javascript/packs/application.js
import './bootstrap_custom.js'

然后

# app/javascript/stylesheets/application.scss
@import './bootstrap_custom.scss'

然后

# app/javascript/stylesheets/bootstrap_custom.scss
@import '~bootstrap/scss/_functions.scss';
@import '~bootstrap/scss/_variables.scss';
@import '~bootstrap/scss/_mixins.scss';
@import '~bootstrap/scss/_root.scss';
@import '~bootstrap/scss/_reboot.scss';
@import '~bootstrap/scss/_type.scss';
@import '~bootstrap/scss/_alert.scss';
@import '~bootstrap/scss/_badge';
@import '~bootstrap/scss/_breadcrumb';
@import '~bootstrap/scss/_button-group';
@import '~bootstrap/scss/_buttons';
@import '~bootstrap/scss/_buttons.scss';
@import '~bootstrap/scss/_card.scss';
@import '~bootstrap/scss/_carousel.scss';
@import '~bootstrap/scss/_close.scss';
@import '~bootstrap/scss/_code.scss';
@import '~bootstrap/scss/_custom-forms.scss';
@import '~bootstrap/scss/_dropdown.scss';
@import '~bootstrap/scss/_forms.scss';
@import '~bootstrap/scss/_grid.scss';
@import '~bootstrap/scss/_images.scss';
@import '~bootstrap/scss/_input-group.scss';
@import '~bootstrap/scss/_jumbotron.scss';
@import '~bootstrap/scss/_list-group.scss';
@import '~bootstrap/scss/_media.scss';
@import '~bootstrap/scss/_modal.scss';
@import '~bootstrap/scss/_nav.scss';
@import '~bootstrap/scss/_navbar.scss';
@import '~bootstrap/scss/_pagination.scss';
@import '~bootstrap/scss/_popover.scss';
@import '~bootstrap/scss/_print.scss';
@import '~bootstrap/scss/_progress.scss';
@import '~bootstrap/scss/_spinners.scss';
@import '~bootstrap/scss/_tables.scss';
@import '~bootstrap/scss/_toasts.scss';
@import '~bootstrap/scss/_tooltip.scss';
@import '~bootstrap/scss/_transitions.scss';
@import '~bootstrap/scss/_utilities.scss';

如果你选择跟随它,请精确地跟随它,不要更改 scss 行等,它会把它弄乱