【问题标题】:Can't load popper.js with Laravel Mix无法使用 Laravel Mix 加载 popper.js
【发布时间】:2021-08-06 05:52:14
【问题描述】:

我最近升级到 bootstrap 5,我的应用程序中的工具提示/弹出框停止工作。我在控制台出现以下错误:

我的理解是我的 Laravel Mix / webpack 未能在其编译中包含 popper.js?我不明白它为什么要查找 popper.js.map,不应该将所有内容都编译成一个文件(app.js)吗?

在我的webpack.mix.js 我有:

const mix = require('laravel-mix');

mix.react('resources/js/app.js', 'public/js')
    .sass('resources/sass/app.scss', 'public/css');

resources/bootstrap.js 我有:

window._ = require('lodash');

try {
    window.Popper = require('popper.js').default;
    require('bootstrap');
} catch (e) {}

window.axios = require('axios');

window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

最后在resources/app.js我有:

window.bootstrap = require('./bootstrap');

require('./components/Job');
require('./components/Toast');
require('./components/Proteomes/ProteomeManager');

var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
  return new window.bootstrap.Tooltip(tooltipTriggerEl)
})

我已经通过 npm 安装并保存了 bootstrap 和 popper。谢谢!

【问题讨论】:

  • 试试mix.react('resources/js/app.js', 'public/js').sass('resources/sass/app.scss', 'public/css').sourceMaps();
  • 谢谢 - 错误消失了,但我的工具提示仍然无法正常工作,我认为这是一个不相关的问题 - 你能解释一下 .sourceMaps() 方法的作用吗?我阅读了文档,但不太了解
  • 它创建了一个可供浏览器/调试器使用的源映射文件,以“在调试器中呈现重构的原始文件”。基本上是从您的已编译资产(例如 public/js/app.js,可以缩小)到您的 resources/js/app.js 的链接/引用,因此您知道原始文件中出了什么问题

标签: javascript laravel twitter-bootstrap webpack


【解决方案1】:

bootstrap.js

window._ = require('lodash');
import Popper from 'popper.js/dist/umd/popper.js'; 

try {
    window.Popper = Popper; 
    window.$ = window.jQuery = require('jquery');
    require('bootstrap');
} catch (e) {}

webpack.mix.js

mix.js('resources/js/app.js', 'public/js').sourceMaps();

【讨论】:

  • 谢谢,我会尽快尝试。你能解释一下为什么必须通过引用 node_modules 中的目录来加载 Popper,而 lodash 或 axios 不需要这个吗?
  • 安装 npm i @popperjs/core 后,如果你查看 node_modules/popperjs/core 文件夹,你会发现 dist/umd/popper.js 这是我们喜欢使用的文件。
  • 是的,我明白这一点——但为什么 lodash 加载了“lodash”而不是“path/to/lodash.js”?和引导程序一样吗?我应该注意到这是我的 Laravel 安装中包含的样板源文件,所以我实际上并没有写太多
  • 查看 loadsh 文件夹内没有 dist 或任何其他文件夹
  • 好的,太棒了!对不起,我现在不在我的电脑前,所以我无法检查这些东西。我的最后一个问题——它在哪里指定 node_modules/ 应该被视为根目录来搜索这些包?再次感谢!!
猜你喜欢
  • 2020-08-26
  • 2018-02-11
  • 1970-01-01
  • 2018-09-16
  • 2018-07-26
  • 1970-01-01
  • 2023-03-28
  • 2018-06-23
  • 2017-08-23
相关资源
最近更新 更多