将 Bootstrap 主题(带有自定义 CSS 和 JS 插件)与带有 Webpacker 和 Yarn/NPM 的 Rails 6 集成

Posted

技术标签:

【中文标题】将 Bootstrap 主题(带有自定义 CSS 和 JS 插件)与带有 Webpacker 和 Yarn/NPM 的 Rails 6 集成【英文标题】:Integrating a Bootstrap theme (with custom CSS and JS plugins) with Rails 6 with Webpacker and Yarn/NPM 【发布时间】:2021-05-15 19:24:18 【问题描述】:

我有一个具有以下目录结构的主题:

+theme
 -index.html
 -file0.html
 ...
 -fileX.html
 +css
  -theme.css
  -theme.min.css
  ...
  -some.css
  -some.min.css
 +js
  -theme.js
  -theme.min.js
 +vendor
  +plugin0
   -plugin0.js
   -plugin0.min.js
  +pluginX
   -pluginX.js
   -pluginX.min.js
 +images
  -image0.jpg
  ...
  -imageX.jpg
  +svg
  -image0.svg
  ...
  -imageX.svg

我想使用 Webpacker 和包管理器(如 Yarn 或 NPM)将主题与 Rails 6 集成。

到目前为止:

我已经安装了Webpacker,并在environment.js进行了配置。 我已经使用Yarn 安装了vendor 文件夹中的所有js plugins。 我已将所有已安装的插件导入到我的application.js 文件中(使用@import 'plugin')。 我通过在app/javascript/packs/ 中包含相应的.js 文件并在我的application.html.erb 文件中使用<script src=""></script> 来导入通过Yarn 不可用的插件。 我已将theme.css 导入到我的applications.scss 文件中(使用@import 'theme.css)。

这就是乐趣的开始:90% 的主题似乎工作正常,但这里缺少一些 css,那里缺少一些 javascript,开发者工具控制台中没有明确的错误或警告消息。

我了解您无法为这个(或任何)特定主题提供帮助,但我希望我的主题集成过程中有问题,或者您可以建议一个实际 100% 有效的不同主题。

如果需要,我可以为您提供实际的 application.jsapplication.html.erb 文件以及无法正常运行的 js 插件的名称 - 我只是不希望问题太大。

【问题讨论】:

祝你好运!我前一阵子试过了,但卡住了。最终从头开始编写了一些 JS。我做的另一件事是当它使用来自其他库的一些 JS 时,我也只是将它们导入到我的项目中。 @sam 你把那些js 文件放在哪个文件夹里了? app/javascript 内。例如,我有一个使用Flatpickr 的主题,但我无法让主题的js 正常工作。所以我通过yarn添加了flatpickr并创建了一个文件app/javascript/date_picker.js。我在其中添加了import flatpickr from "flatpickr",然后添加了一个监听器,用于加载涡轮链接。 @sam 如果您可以对下面的答案进行更多分析,我也会自己尝试一下,让您知道它是否对我有用,并在任何情况下都支持您!还是谢谢! 【参考方案1】:

我没有一个简单的答案给你,但有几个可能的解决方案。以下是我在 Bootstrap 主题的类似船上时所做的几件事。

    将引导程序与主题的 JS 一起单独导入。为了做到这一点,我将主题的 theme.min.js 文件移动到 app/javascript 中,然后将其导入。
    # app/javascript/packs/application.js
    require("bootstrap")
    require("theme.min")
    
    尝试手动添加主题使用的任何额外库。例如,我有一个使用Flatpickr 选择日期的主题。我跑了yarn add flatpickr,然后制作了一个js文件来使用它:
    # app/javascript/date_picker.js
    import flatpickr from "flatpickr"
    
    document.addEventListener('turbolinks:load', () => 
      document.querySelectorAll(".flatpickr").forEach((element) => 
        flatpickr(element, 
          altInput: true,
          altFormat: "F j, Y",
        )
      )
    )
    
    # app/javascript/packs/application.js
    require("date_picker")
    
    最后,如果这不起作用,请手动编写 JS。

老实说,这三个解决方案中的每一个都适用于部分主题的 JS。您可能还需要手动添加一些 CSS。为此,我在我的 javascript 目录中添加了一个 css 文件夹,将主题的源 CSS 放在该文件夹中,然后导入它。

# app/javascript/packs/application.js
import "css/site"

# app/javascript/css/site.scss
@import "theme.min.css";
@import "feather.css";
@import "flatpickr.min.css";
@import "quill.core.css";
@import "vs2015.css";

其中很多主题都可以从源文件构建到 dist 文件夹(或类似文件夹)。我认为我使用的那个是 gulp 构建的。

【讨论】:

以上是关于将 Bootstrap 主题(带有自定义 CSS 和 JS 插件)与带有 Webpacker 和 Yarn/NPM 的 Rails 6 集成的主要内容,如果未能解决你的问题,请参考以下文章

WordPress 自定义主题中的 Bootstrap 3 响应式表格代码替换

Angular 材质自定义组件主题

如何自定义 react-bootstrap 组件?

Bootstrap 4 - 在css中通过根名称引用颜色[重复]

Kendo UI Bootstrap 主题无法与 Bootstrap 3.1.0 配合使用

如何在 Angular 中使用带有 SASS 的 Bootstrap 4