2017-08-12 5 views
12

So Bootstrap 4 Beta ist aus ... yey! Allerdings Tether wurde von Popper.js für Tooltip (und andere Funktionen) ersetzt. Ich sah geworfen einen Fehler in der Konsole schnell genug, um mich über die Änderung zu Popper.js beraten: leichtBootstrap 4 Beta Popper.js mit Webpack Import 3.x wirft Popper ist kein Konstruktor

Bootstrap dropdown require Popper.js 

scheint genug, ich ging hin und aktualisierte meine webpack.config.js (die gesamte Konfiguration gesehen here werden kann) und Bootstrap dann zu arbeiten begann (die einzige Änderung, die ich tat, war Tether mit Popper zu ersetzen):

plugins: [ 
new ProvidePlugin({ 
    'Promise': 'bluebird', 
    '$': 'jquery', 
    'jQuery': 'jquery', 
    'window.jQuery': 'jquery', 
    'window.$': 'jquery', 
    Popper: 'popper.js' 
}), 

ich habe auch die import 'bootstrap' in meiner main.ts Datei.

aber ich habe jetzt ein anderes Problem (was ich nicht mit Tether hatte), ein neuer Fehler in der Konsole ausgelöst wird:

Uncaught TypeError: Popper is not a constructor 

Wenn ich versuche, in Chrome zu debuggen, muss ich Popper geladen, wie ein Objekt (weshalb Bootstrap aufhört, sich zu beschweren), wie Sie auf dem Druckbildschirm unten sehen können. enter image description here

schließlich alle meine Code enthalten. Ich benutze Bootstrap Tooltip mit einem einfachen benutzerdefinierten Elemente gebaut mit Aurelia und TypeScript (der mit früheren Bootstrap alpha zur Arbeit 6 und Tether)

import {inject, customAttribute} from 'aurelia-framework'; 
import * as $ from 'jquery'; 

@customAttribute('bootstrap-tooltip') 
@inject(Element) 
export class BootstrapTooltip { 
    element: HTMLElement; 

    constructor(element: HTMLElement) { 
    this.element = element; 
    } 

    bind() { 
    $(this.element).tooltip(); 
    } 

    unbind() { 
    $(this.element).tooltip('dispose'); 
    } 
} 

Sieht aus wie ich nicht Popper korrekt importiert habe, wenn ja dann, was das Beste ist, Weg, um das mit Webpack 3.x zu erreichen?

Antwort

28

zu lösen Während Bootstrap 4 documentation durchsuchen. Ich fand einen Abschnitt über Webpack, das erklärt, wie es richtig zu installieren. Im Anschluss an der Bootstrap - installing with Webpack Dokumentation, die Antwort zu ändern, einfach die webpack.config.js mit dem folgenden:

plugins: [ 
    // ... 
    new webpack.ProvidePlugin({ 
    $: 'jquery', 
    jQuery: 'jquery', 
    'window.jQuery': 'jquery', 
    Popper: ['popper.js', 'default'] 
    }) 
    // ... 
] 

und lassen Sie sich zu import es in den main.ts

import 'bootstrap'; 

und voilà nicht vergessen! Wir sind wieder im Geschäft :)

+1

genial !!! Ich suche es vor 3 Tagen im Internet !!! ich danke dir sehr!!! – LeandroLuk

+0

Hey Jungs! Wie kann ich das gleiche mit aurelia.json tun? –

+0

@JhonatasKleinkauff die Frage hier war nur für WebPack, aber für 'Aurelia-CLI' haben Sie etwas in Anlehnung an den vorherigen Tether-Import ausprobiert: [aurelia-cli-to-use-with-bootstrap-4] (https: //stackoverflow.com/questions/39432962/how-to-add-therer-in-aurelia-cli-to-use-with-bootstrap-4/39461325#39461325) – ghiscoding

3

Ich lief in das gleiche Problem und die Lösung ist hier beschrieben: https://github.com/FezVrasta/popper.js/issues/287

Mein main.ts sieht nun so etwas wie folgt aus:

import "jquery"; 
import Popper from "popper.js"; 

(<any>window).Popper = Popper; 

require("bootstrap"); 

Und ich hatte npm install @types/requirejs --save laufen die bekommen Anruf an require funktioniert.

EDIT: ich diese beim ersten Mal völlig verfehlt, aber die Dokumention hat tatsächlich einen besseren Weg, dies https://getbootstrap.com/docs/4.0/getting-started/webpack/

plugins: [ 
    ... 
    new webpack.ProvidePlugin({ 
    $: 'jquery', 
    jQuery: 'jquery', 
    'window.jQuery': 'jquery', 
    Popper: ['popper.js', 'default'], 
    // In case you imported plugins individually, you must also require them here: 
    Util: "exports-loader?Util!bootstrap/js/dist/util", 
    Dropdown: "exports-loader?Dropdown!bootstrap/js/dist/dropdown", 
    ... 
    }) 
    ... 
] 
+0

Ihre Lösung funktionierte zunächst nicht, der Hauptgrund war, dass ich Popper vollständig aus der 'webpack.config.js' entfernen musste. Kannst du es bitte in deiner Antwort erwähnen, damit ich es annehmen kann? – ghiscoding

+0

Gefunden, wie es direkt in der webpack.config zu tun, ich fand es tatsächlich durch Glück beim Durchsuchen der neuen Bootstrap 4-Dokumentation in ihrer ersten Abschnitt gestartet. Also habe ich meine eigene Frage beantwortet, aber immer noch deine geupdated, weil das mir geholfen hat, das wirkliche Problem zu verstehen. Danke noch einmal. – ghiscoding

3

Wenn Sie mit Webpack dies tun:

window.$ = window.jQuery = require('jquery'); 
window.Popper = require('popper.js').default; // pay attention to "default" 
require('bootstrap/dist/js/bootstrap'); 
0

In ASP.Netto-Core-2-Projekt die folgenden Skripte der Haupt-HTML-Datei („_Layout.cshtml“ Datei)

<script src="~/lib/jquery/dist/jquery.min.js"></script> 
<script src="~/js/popper.js"></script> 
<script src="~/lib/bootstrap/dist/js/bootstrap.min.js"></script> 

Für mich hinzufügen, es funktioniert.

Verwandte Themen