如果 Bootstrap 加载了 Webpack (Rails),像 modal() 这样的方法将不起作用

2024-02-04

在我的 Rails 5 应用程序中,如果我使用标头加载 Bootstrap 4<script>来自 CDN 的标签,一切正常。但是当我安装 Bootstrap (及其依赖项)时node_modules,并使用 Webpack 提供服务,它大部分仍然有效...但是 jQuery 方法 Bootstrap 应该添加如下$(foo).modal() or $(bar).popover()在 JavaScript 控制台中给出错误:

Uncaught TypeError: $(...).modal is not a function
Uncaught TypeError: $(...).popover is not a function

StackOverflow 还有其他几个关于此类错误的问题,但其中列出的解决方案都不适合我。最常见的原因似乎是 jQuery 被包含两次,但我很确定我没有这样做;当我删除 jQuery 时import from app/javascript/packs/application.js(见下文),然后所有 jQuery 都会停止工作。 jQuery 不在我的Gemfile作为 gem,单词“jquery”仅出现在我下面显示的文件中。

我正在以正确的顺序加载(见下文;jQuery 和 Popper 在 Bootstrap 之前)。我在方法调用周围使用了文档就绪的包装器(见下文),因此我不会太早调用它们。 Bootstrap CSS 加载良好,并且 DOM 元素使用data-toggle="modal"正确显示模态:

<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
  Show Modal
</button>
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <!- ... ->
    </div>
  </div>
</div>

...只有当像这样的方法时$(foo).modal()等在JS代码中调用我收到错误:

<script>
  $(function () {
    $('#exampleModal').on('shown.bs.modal', function (e) {
      console.log('modal shown!');
    });
    $('#otherModalButton').click(function (e) {
      e.preventDefault();
      console.log('clicked!');
      $('#exampleModal').modal('show');  // <- "not a function" error
      return false;
    });
  });
</script>

我的设置:

Node.js v10.20.1
ruby 2.5.8p224 (2020-03-31 revision 67882) [x86_64-linux]
Rails 5.2.4.2

package.json:    "@rails/webpacker": "4.2.2",
package.json:    "bootstrap": "4.4.1",
package.json:    "jquery": "3.4.1",
package.json:    "popper.js": "1.16.1"
package.json:    "webpack-dev-server": "^3.11.0"
// config/webpack/development.js
process.env.NODE_ENV = process.env.NODE_ENV || 'development'
const environment = require('./environment')
module.exports = environment.toWebpackConfig()
// config/webpack/environment.js
const { environment } = require('@rails/webpacker')
const webpack = require('webpack')
environment.plugins.append(
  'Provide',
  new webpack.ProvidePlugin({
    $: 'jquery',
    jQuery: 'jquery',  // taking this out doesn't fix it
    Popper: ['popper.js', 'default']
  })
)
module.exports = environment
<!DOCTYPE html>
<!-- app/views/layouts/application.html.erb -->
<html>
  <head>
    [...]
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>
    <%= javascript_pack_tag    'application' %>
    <%# if I load with these two lines (instead of in app/javascript/packs/application.js), it all works: %>
    <%# javascript_include_tag 'https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.1/umd/popper.min.js' %>
    <%# javascript_include_tag 'https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.4.1/js/bootstrap.min.js' %>
  </head>
  <body>
    <%= yield %>
  </body>
</html>
// app/javascript/packs/application.js
import 'jquery/src/jquery'
import 'popper.js/dist/esm/popper'
import 'bootstrap/dist/js/bootstrap'
import '../stylesheets/application'
// app/javascript/stylesheets/application.scss
@import "~bootstrap/scss/bootstrap";

我已经手动查看了 JS 包webpack-dev-server正在生产;我可以在那里看到 Bootstrap。控制台中的 Webpack 输出显示包已成功编译,没有错误。我已经在 Chrome(ChromeOS 和 MacOS)和 Firefox(MacOS)上尝试过此操作。

我可以尝试什么想法吗?


问题是

new webpack.ProvidePlugin({
 $: 'jquery',
 jQuery: 'jquery',  // taking this out doesn't fix it
...

and require "jquery"导致jquery被加载两次。如果你检查编译后的 application.js,你可能会看到它是必需的 "./node_modules/jquery/dist/jquery.js",然后要求里面的所有js文件"./node_modules/jquery/"一项一项地尝试、搜索./node_modules/jquery/

正如您在小地图中看到的,结果很多!

我的解决方案

我通过将其删除来解决了这个问题enviroments.js

 $: 'jquery',
 jQuery: 'jquery',  

并在 applications.js 中进行更改require "jquery" to

import JQuery from 'jquery';
window.$ = window.JQuery = JQuery;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果 Bootstrap 加载了 Webpack (Rails),像 modal() 这样的方法将不起作用 的相关文章

  • 无法更改 Bootstrap 4 中的导航栏链接颜色

    我正在尝试更改导航栏的一个链接的颜色 而我尝试了所有方法它仍然具有默认颜色 这是代码 li class nav item signup a class nav link Sign Up a li css navbar light navba
  • CSS 模块:如何禁用文件的本地范围?

    我在一个新的 React 项目中使用 CSS 模块 通过 Webpack css 加载器 尽管它工作得很好 但我在获取 SCSS 时遇到了困难反应选择 https github com JedWatson react select上班 我想
  • 如何在 Vue.js 中排除文件(例如配置文件)?

    https cli vuejs org config configurewebpack https cli vuejs org config configurewebpack https cli vuejs org config chain
  • npm install -D sass-loader node-sass Vue.js 2021

    您好 问题是为 Vue js 设置 SASS 我跑 Node js 15 7 0 Vue js vue cli 4 5 11 这是我在运行此命令时在控制台中遇到的错误 npm install D sass loader 节点 sass np
  • 解决方案:动态加载独立编译的 Webpack 2 包 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想分享如何捆绑一个充当插件主机以及它如何加载已安装的插件动态地 应用程序和插件都与 Webpack 捆绑在一起 应用程序和插件被编译和分
  • 防止 Bootstrap IE 下拉列表在滚动条单击时关闭

    在 IE 中 单击下拉菜单滚动条时 下拉菜单将关闭 当您使用鼠标滚轮滚动它时 效果很好 这是代码层链接 https www codeply com go Uh8qadr3q2 https www codeply com go Uh8qadr
  • webpack 加载器并包含

    我是 webpack 的新手 我正在尝试了解加载器及其属性 例如测试 加载器 包含等 这是我在 google 中找到的 webpack config js 的示例片段 module loaders test js loader babel
  • NuxtJS & SASS Loader - 在生产环境中使用 sass-loader (SCSS) 进行构建

    我添加了此行以在开发 本地 服务器上使用 sass loader 进行构建 nuxt config js module exports mode spa build analyze analyzerMode static generateS
  • 验证 ActionCable 连接

    我发现了一个很棒的 ActionCable gem 它是 SPA 的一个很好的解决方案 我只想发送html css and js资产 所有其他连接将通过ActionCable 交换字符串或者整数并不难 但是如何通过ActionCable登录
  • 无法在 .tsx 文件中导入 CSS 模块

    我正在使用 typescript 构建基本的 React 应用程序 但无法导入 CSS 文件索引 tsx file 我能够导入索引 css文件如下 import index css this import gives typescript
  • 从 Bootstrap 4 网格中删除装订线

    在 Bootstrap 4 中 我被要求自定义桌面的默认网格系统 如下所示 其中 容器 桌面断点为1280px 我尝试过的例子是 body margin top 3rem l wrap max width 1280px margin rig
  • @apply 在 Laravel Mix 中的 Vue 组件内不起作用

    我在 Laravel 中使用 Tailwind CSS 和 VueJS 组件 如下所示
  • 带缩略图的轮播和 bootstrap v4

    我看到了带有缩略图的轮播演示bootstrap 3 here http jsfiddle net talmand JS6JV 我正在尝试为 bootstrap v4 实现相同的功能 但无法弄清楚如何修复一些 UI 细节 例如左 右阴影覆盖整
  • 将 sass 变量导入 gatsby 组件中引用的第二个 Sass 文件

    我正在使用 Gatsby 构建一个静态站点项目 我已经成功安装了 gatsby sass 插件并让 sass 正常工作 但是 我无法将自定义 sass 变量文件正确导入到其他组件 sass 文件中 下面是我的文件夹结构 src compon
  • css-loader 不导入 .css 文件返回空对象

    从 css 文件导入样式 返回空对象 看来 css loader 无法正常工作 谁可以帮我这个事 请找到下面的参考文件 index js import React from react import style from header cs
  • 将rails_admin 与rails_api 结合使用

    我最初将此发布为Rails api GitHub 上的问题 https github com sferik rails admin issues 2617 但由于不活跃 我现在将其发布在这里 我正在尝试使用rails admin使用 Rai
  • TypeScript 编译速度极慢 > 12 秒

    只是把它放在那里看看其他人是否也遇到这个问题 我已经使用 webpack 作为我的构建工具 使用 typescript 构建了一个 Angular 2 应用程序 一切都运行良好 但是我注意到 typescript 编译超级超级慢 我现在只有
  • Bootstrap 4 具有 d-flex 类的列表项不响应 .hide()?

    当我添加课程时d flex我的引导程序 4 ul 列表项不响应 hide 不再 尽管style display none 被添加到 DOM 中 The d flex用于Bootstrap 4 列表徽章 https getbootstrap
  • 在 Bootstrap 4 中创建水平表单

    我是初学者引导程序我正在使用 bootstrap 来设计表单 我正在尝试使用创建水平形式form horizontal引导类BUT标签和文本字段未显示在同一水平线上 我看过有关它的教程 并且我从该教程中复制了相同的代码 但它对我不起作用 而
  • 具有客户端/服务器节点设置的 Webpack?

    我正在尝试为带有节点后端服务器的 Angular2 应用程序设置基于 webpack 的流程 经过几个小时的努力 我已经成功地让客户端愉快地构建了 但我现在不知道如何集成我的服务器构建 我的服务器使用生成器 因此必须以 ES6 为目标 并且

随机推荐

  • Symfony 3.3 将存储库注入服务

    我有一个包 它保存在私有 Satis 存储库中 因为它的实体和存储库在多个应用程序之间共享 使用该捆绑包的其余应用程序是 Symfony 2 7 和 2 8 应用程序 我正在开发一个新应用程序 要求使用 Symfony 3 3 在 symf
  • 为什么在控制台应用程序中使用 async/await 时需要 AsyncContext?

    我在控制台应用程序中调用异步方法 我不希望应用程序在启动后不久即退出 即在可等待的任务完成之前退出 看来我可以这样做 internal static void Main string args try Task WaitAll DoThis
  • 全局禁用实体框架中的动态代理

    请问如何禁用 Entity Framework 5 中创建的所有实体的动态代理 目前 我正在设置这个espEntities Configuration ProxyCreationEnabled false 在每一个实例中DbContext有
  • 使用柱形图而非蜡烛图的 OHLC 图表的 GGPlot

    我正在研究 R 中的 ggplot 并尝试创建股票图表 我已经能够创建烛台图 现在我想制作条形图 它由一条从低价到高价的垂直线组成 然后 线的左边是开盘价 右边是收盘价 我不知道如何添加这个勾号 我能想到的最接近的东西是 geom erro
  • 如何接受文件 POST

    我正在使用 asp net mvc 4 webapi beta 来构建休息服务 我需要能够接受来自客户端应用程序的发布的图像 文件 使用 webapi 可以吗 以下是我目前正在使用的操作方式 有谁知道这个例子应该如何工作 HttpPost
  • 将地址转换为坐标

    有没有办法用 bing 地图将地址转换为坐标 Thank 从地址到纬度 经度坐标的过程通常称为地理编码 这篇博文有一些使用 Bing 的 WP7 的很好的示例代码 http www braincastexception com wp7 we
  • 如何将 RGB 或 HEX 颜色代码分组为更大的颜色组集?

    我正在分析大量图像并提取主要颜色代码 我想将它们分组为通用颜色名称范围 例如绿色 深绿色 浅绿色 蓝色 深蓝色 浅蓝色等 我正在寻找一种与语言无关的方式来自己实现一些东西 如果有我可以研究的例子来实现这一点 我将非常感激 在机器学习领域 你
  • 在 Apple iAP 中哪里可以找到有关 SSServerErrorDomain 的说明?

    我们有一个应用程序 它收集了一些来自 Apple iAP 购买的错误代码 在collect dashboard中 我们看到一些错误代码报告 但找不到确切的含义 例如 SSServerErrorDomain 2004 SSServerErro
  • ImportError:无法导入名称 ABCMeta - Linux 上 PyDev 中的 Python 错误

    我在 Linux 上使用 PyDev 编写代码时遇到了这个奇怪的错误 即使像这样的简单代码也会产生错误 print Hello World 错误就在这里 True Traceback most recent call last File u
  • 如何在 Windows Phone 8 应用程序中检查互联网连接可用性

    我正在开发Windows Phone 8 应用程序 在此应用程序中 我必须连接到服务器才能获取数据 因此 在连接到服务器之前 我想检查设备的互联网连接是否可用 如果互联网连接可用 那么只有我会从服务器获取数据 否则我会显示错误消息 请告诉我
  • AWS 放大在公共目录中添加文件

    当我在放大选项中提供密钥时 我正在使用 AWS amplify 在 s3 存储桶中上传视频 它会创建一个公共文件夹 然后获取该密钥 Amplify Storage uploadFile user hello 123321 mp4 examp
  • Dropbox 应用只能与一个 Dropbox 帐户交互

    我的需要是有一个简单的网络表单 还可以让人们上传一些 pdf 文件 我认为我可以做的 由于上传文件的大小和数量 是将这个应用程序的后端绑定到我的 dropbox 帐户或我的 box com 帐户 这两种服务都提供类似的 API 来构建应用程
  • 在 JavaScript 中将音频从 getUserMedia() 编码为 .OGG [重复]

    这个问题在这里已经有答案了 我正在开发一个 HTML5 项目 将 iOS 应用程序转换为基于 Web 的应用程序 应用程序内容创建的一部分是录音 我尝试在 JavaScript 中复制它而不使用插件 到目前为止 我已经能够从 getUser
  • java xpath从xml中删除元素

    我正在尝试从 xml 文件中删除元素和子元素 特别是名为 Testlogging 的附加程序 首先 这是我的 xml 文件的外观
  • 防止重新渲染在包装组件中启动 useState 的同级组件

    我对 React 不太有经验 但我有一个非常简单的设置 export default function App const title setTitle useState still empty const myFunction title
  • 尝试获取 iOS MKCoordinateSpan 的跨度大小(以米为单位)

    当我需要做一个MKCoordinateRegion 我执行以下操作 var region MKCoordinateRegion FromDistance coordinate RegionSizeInMeters RegionSizeInM
  • 为什么使用邻接矩阵或邻接表?

    我刚刚开始学习图表 让我困惑的是为什么我们需要使用外部数据结构 如矩阵或列表 存储图的哪些顶点连接到其他顶点 为什么每个顶点不能像决策树中的节点那样只保存对其连接的顶点的引用 对我来说 这似乎更直观 Thanks 嗯 这来自于一种设计理念
  • 获取受 linq 中扩展方法影响的类型列表

    如何获取ndepend cqlinq中扩展方法扩展的类型列表 使用反射来编码这似乎有点麻烦 而 ndepend 已经存在了 NDepend 代码模型没有直接的方法来解析方法参数类型 因此 我们可以通过依赖于从方法名称中提取的字符串格式化扩展
  • 如何在邮递员的当前时间戳中添加更多时间?

    我知道我可以将当 前时间戳添加到请求中 如下所示 postman setEnvironmentVariable pickUpTime new Date toISOString 但是 我想在 Postman 的当前时间戳上添加 10 分钟后的
  • 如果 Bootstrap 加载了 Webpack (Rails),像 modal() 这样的方法将不起作用

    在我的 Rails 5 应用程序中 如果我使用标头加载 Bootstrap 4