如何使用 importmap 在 Rails 7 中安装 jQuery?

2023-11-26

我有一个新的 Rails 7 应用程序。我目前正在尝试学习自 Rails 5 以来的所有新功能。我想在我的 javascript 文件中使用以下代码,但到目前为止我收到以下错误:Uncaught ReferenceError: $ is not defined.

$(document).on("turbo:load", () => {
  console.log("turbo!");
});

这是另外两个相关文件。如果我需要发布其他内容,请告诉我。

导入映射.rb

pin "application", preload: true
pin "jquery", to: "https://ga.jspm.io/npm:[email protected]/dist/jquery.js", preload: true
pin "@hotwired/turbo-rails", to: "turbo.min.js", preload: true
pin "@hotwired/stimulus", to: "stimulus.min.js", preload: true
pin "@hotwired/stimulus-loading", to: "stimulus-loading.js", preload: true
pin "el-transition", to: "https://ga.jspm.io/npm:[email protected]/index.js"

pin_all_from "app/javascript/controllers", under: "controllers"

应用程序.js

import "@hotwired/turbo-rails"
import "jquery"

$(document).on("turbo:load", () => {
  console.log("turbo!");
});

只需切换到CDN即可jspm, jQuery导入时将是全球性的:

# config/importmap.rb

# NOTE: pin jquery to jsdelivr instead of jspm
pin "jquery", to: "https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.js"
// app/javascript/application.js

import "jquery"; // this import first
import "script"; // then your other imports that use `$`

// NOTE: don't use relative imports: `import "./script"`
//       add `pin "script"` to `importmap.rb`

console.log($); // ok
// app/javascript/script.js
console.log($)  // ok

一切都正常,一次导入,多次导入,jquery 插件。无需额外吊装。


使用jspm时,jQuery必须在需要时显式导入,就像任何其他模块一样:

// app/javascript/place_where_i_need_jquery.js

import $ from "jquery";

// NOTE: don't make jQuery global, this only kind of works.
// window.$ = window.jQuery = $;

console.log($); // ok

澄清并提出window休息的事情。它适用于stimulus,因为控制器是imported具有动态的import()它通常在 jquery 加载后运行,并且有时间将其分配给window,但这并不能保证。这就是为什么你必须做吊装工作以确保$在任何其他进口之前成为全球性的。


请记住,默认情况下导入映射是延迟的,因此您不能使用$在你的内联脚本中(不是没有向后扭转你的手臂),因为 jquery 是在页面加载后加载的。

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

如何使用 importmap 在 Rails 7 中安装 jQuery? 的相关文章

随机推荐

  • 是否可以覆盖“呼叫”功能?

    是否可以在通用级别上重写 调用 函数 以便每次在应用程序中的任何位置调用方法时都会发生一些情况 我尝试覆盖 Object call 但尽管我设法做到了 但它并没有改变我的应用程序的工作方式 顺便说一句 即使它有效 我是否应该每次都显式调用
  • Perl 正则表达式中的单独反向引用后跟数字文字

    我发现这个相关问题 在 perl 中 替换文本中的反向引用后跟数字文字但看起来完全不同 我有一个像这样的正则表达式 s 0 9 xy 1 1 2 g whitespace here 但这个空白出现在替换中 如何在不让 perl 混淆反向引用
  • 图层中的子集参数不再适用于 ggplot2 >= 2.0.0

    我更新到最新版本了ggplot2并在层中打印子集时遇到问题 library ggplot2 library plyr df lt data frame x runif 100 y runif 100 ggplot df aes x y ge
  • Android - 如何检查互联网访问,而不仅仅是 wifi 连接? [复制]

    这个问题在这里已经有答案了 我尝试使用下面的代码来检查我的手机是否已连接到无线网络 当我想知道我的手机是否已连接到网络时 它运行良好 但它无法提供有关互联网访问的信息 类似于 Ping 任何网站 实际上我遵循了很多链接但仍然没有答案 所以如
  • 强制 phpmailer 发送正文为空的邮件

    我需要使用 phpMailer 将 pdf 文件作为附件发送到传真网关 如果此电子邮件有正文 则传真将有第二页包含此文本 通过说 mail gt Body php 邮件返回Message body empty 如何强制 phpMailer
  • 在 eclipse 中调试 GRAILS 3

    我想知道是否有任何方法可以通过从 eclipse mars IDE 中单击来调试 Grails 3 应用程序 就像 Java 或 Java Spring Boot Web 应用程序一样 可以执行以下操作 在服务器上调试 可以 运行为 gra
  • 是否可以逐行调试 bash 脚本?

    我会喜欢 Microsoft Visual Studio 中的逐行调试之类的功能bash 当前变量值等等 有什么工具或方法可以做到吗 set x and set v不错 但并不完美 See bashdb 如果您的系统上安装了它 请参阅man
  • 在线性时间内从排序数组构建红黑树

    我知道如何通过 n 次插入来构建它 每次插入的效率为 O log n n log n 总体 我还知道 2 3 4 树的等效结构也可以用线性时间从排序数组构建 谁能提供有关红黑版本的简单解释吗 无论您要构建哪种 BST 算法将是相同的 只需要
  • 了解 Rails 迁移语句 (:null => false)

    我试图理解以下声明 它来自 Rails 迁移文件 x datetime new null gt false x datetime update null gt false 我理解这两个语句的第一部分 逗号之前的所有内容 但我不确定空部分 n
  • 尝试比较两个文本文件,并根据信息创建第三个文本文件

    我有两个文本文件 master txt 和 926 txt 如果 926 txt 中有一行不在 master txt 中 我想写入一个新文件 notinbook txt 我写了我能想到的最好的东西 但考虑到我是一个糟糕的 新手程序员 它失败
  • FluentFTP - 连接时出现错误“尝试从套接字流读取数据超时!”

    Getting 尝试从套接字流读取数据超时 使用 FluentFTP 连接到 FTP 时 以下是我用来连接的源代码 Console WriteLine Configuring FTP to Connect to 0 hostname ftp
  • 我听说全局变量不好,我应该使用什么替代解决方案?

    我读过所有的地方全局变量不好并应使用替代方案 具体来说 在 Javascript 中 我应该选择什么解决方案 我正在考虑一个函数 当输入两个参数时 function globalVariables Variable Value 查看变量是否
  • addChildViewController 和 PresentViewController

    iOS 5引入了自定义容器视图控制器的概念并提供了类似的APIaddChildViewController 问题 您可以将视图控制器添加为子视图控制器并仍然使用它来呈现它吗presentViewController 执行后者是否会自动使其成
  • Java 将 áéőűú 更改为 aeouu [重复]

    这个问题在这里已经有答案了 可能的重复 从 Unicode 字符中删除变音符号 有没有办法去掉重音符号并将整个字符串转换为常规字母 我怎样才能做到这一点 谢谢您的帮助 我认为你的问题与这些相同 Java 摆脱重音并将其转换为常规字母 将 J
  • 如何保存带有缩进的 MSXML2.DomDocument? (我认为它使用MXXMLWriter)

    我有一个 MSXML2 DomDocument 的实例 我挥手将其保存 并缩进 此代码有效 但不缩进 var dom new ActiveXObject MSXML2 DomDocument fiddle with dom here dom
  • JAVA_HOME 未设置

    在工作的同时Hadoop在伪分布式操作中实现 我发现以下异常JAVA HOME变量未设置 但当我尝试回显它时 它已设置 变量预设在conf hadoop env sh 编辑export JAVA HOME usr lib jvm java
  • 仅按变体比较枚举,而不按值比较

    我有一个具有以下结构的枚举 enum Expression Add Add Mul Mul Var Var Coeff Coeff 其中每个变体的 成员 都是结构 现在我想比较两个枚举是否具有相同的变体 所以如果我有 let a Expre
  • 在文档就绪时访问 primefaces widgetvars

    我正在尝试访问文档上的 primefaces 组件 如下所示 function var showDialog getUrlParameter showDialog if showDialog true PF myDialog show 但在
  • 如何控制android后退按钮路线?

    Onsen 中的默认设置是当按下设备后退按钮时应用程序关闭 存在 有什么方法可以控制 Onsen 中的 ons navigator 操作 页面历史记录吗 Thanks 对于 PhoneGap Cordova 按下后退按钮时会触发后退按钮事件
  • 如何使用 importmap 在 Rails 7 中安装 jQuery?

    我有一个新的 Rails 7 应用程序 我目前正在尝试学习自 Rails 5 以来的所有新功能 我想在我的 javascript 文件中使用以下代码 但到目前为止我收到以下错误 Uncaught ReferenceError is not