Ich schreibe eine neue App mit (JavaScript) ES6
-Syntax über babel
Transpiler und die preset-es2015
Plugins sowie semantic-ui
für den Stil.
index.js
import * as stylesheet from '../assets/styles/app.scss';
import * as jquery2 from '../dist/scripts/jquery.min';
import * as jquery3 from '../node_modules/jquery/dist/jquery.min';
console.log($('my-app'));
index.html
<!DOCTYPE html>
<html lang="fr">
<head>
<body>
<script src="dist/app.js"></script>
</body>
</html>
Projektstruktur
.
├── app/
│ ├── index.js
├── assets/
├── dist/
│ ├── scripts/
│ │ ├── jquery.min.js
├── index.html
├── node_modules/
│ ├── jquery/
│ │ ├── dist/
│ │ │ ├── jquery.min.js
├── package.json
└── tests/
package.json
…
"scripts": {
"build:app": "browserify -e ./app/index.js -o ./dist/app.js",
"copy:jquery": "cpy 'node_modules/jquery/dist/jquery.min.js' ./dist/scripts/",
…
},
"devDependencies": {
"babel-core": "6.3.x",
"babel-preset-es2015": "6.3.x",
"babelify": "7.2.x",
"cpy": "3.4.x",
"npm-run-all": "1.4.x",
"sassify": "0.9.x",
"semantic-ui": "2.1.x",
…
},
"browserify": {
"transform": [
[ "babelify", { "presets": [ "es2015"]}],
[ "sassify", { "auto-inject": true}]
]
}
Frage
Die Verwendung des klassischen <script>
Tags zum Importieren jquery
funktioniert einwandfrei, aber ich versuche, die ES6-Syntax zu verwenden.
- Wie importiere ich
jquery
, umsemantic-ui
die ES6-Importsyntax zu erfüllen ? - Soll ich aus dem
node_modules/
Verzeichnis oder meinemdist/
(wo ich alles kopiere) importieren ?
javascript
jquery
ecmascript-6
browserify
semantic-ui
Édouard Lopez
quelle
quelle
dist
macht keinen Sinn, da dies Ihr Distributionsordner mit der produktionsbereiten App ist. Wenn Sie Ihre App erstellen, sollten Sie die Inhalte der Knotenmodule in den Ordner dist aufnehmen, einschließlich jQuery.Antworten:
index.js
Wie @nem im Kommentar vorgeschlagen hat, sollte der Import zunächst erfolgen von
node_modules/
:Als nächstes ist der Glob -
* as
- falsch, da ich weiß, welches Objekt ich importiere ( z. B.jQuery
und$
), sodass eine direkte Importanweisung funktioniert.Zuletzt müssen Sie es mit dem Skript anderen Skripten aussetzen
window.$ = $
.Dann importiere ich als beide
$
undjQuery
um alle Verwendungen abzudecken,browserify
entferne Importduplikationen, also kein Overhead hier! ^ o ^ yquelle
window.$ = $
. Ich verstehe nicht, warum das nötig ist. Werden andere Skripte nicht automatisch in einem einzigenjs
Skript gebündelt, wenn browserify magisch ist?import {$,jQuery} from 'jquery';
? Warum so viele Importe?jQuery
?Module '"jquery"' has no exported member 'jQuery'
oderModule '"jquery"' has no default export
was vermisse ich bitte?Basierend auf der Lösung von Édouard Lopez, aber in zwei Zeilen:
quelle
window.$ = window.jQuery = require('jquery');
require
(CommonJS) ist nichtimport
(ES-Modul) und der Einzeiler scheint mit nicht möglich zu seinimport
. (Importieren Sie den gesamten Inhalt von JQuery in den globalen Bereich. Dadurch wird $ in den aktuellen Bereich eingefügt, der alle aus der JQuery exportierten Bindungen enthält.
Jetzt gehört das $ zum Fensterobjekt.
quelle
Sie können einen Modulkonverter wie folgt erstellen:
Dadurch werden von jQuery eingeführte globale Variablen entfernt und das jQuery-Objekt standardmäßig exportiert.
Verwenden Sie es dann in Ihrem Skript:
Vergessen Sie nicht, es als Modul in Ihr Dokument zu laden:
http://plnkr.co/edit/a59ETj3Yo2PJ0Aqkxbeu?p=preview
quelle
Die akzeptierte Antwort hat bei mir nicht funktioniert.
Hinweis: Wenn Sie Rollup verwenden, wissen Sie nicht, ob diese Antwort
nach
npm hierher gehört. Speichern Sie jquery
in custom.js
oder
Ich habe eine Fehlermeldung erhalten : Modul ... node_modules / jquery / dist / jquery.js exportiert nicht jQuery
oder
Modul ... node_modules / jquery / dist / jquery.js exportiert $
rollup.config.js nicht
statt Rollup Inject versucht
package.json
Dies funktionierte:
Die Plugins für Rollup Inject und CommonJS wurden entfernt
dann in custom.js
quelle
namedExports
es im CommonJS-Plugin nicht mehr existiertWenn es jemandem hilft, werden Javascript-Importanweisungen gehisst. Wenn eine Bibliothek eine Abhängigkeit (z. B. Bootstrap) von jquery im globalen Namespace (Fenster) hat, funktioniert dies NICHT:
Dies liegt daran, dass der Import von Bootstrap angehoben und ausgewertet wird, bevor jQuery an das Fenster angehängt wird.
Eine Möglichkeit, dies zu umgehen, besteht darin, jQuery nicht direkt zu importieren, sondern stattdessen ein Modul zu importieren, das selbst jQuery importiert UND an das Fenster anfügt.
wo
leaked-jquery
sieht aus wieEG, https://github.com/craigmichaelmartin/weather-app--birch/blob/4d9f3b03719e0a2ea3fb5ddbbfc453a10e9843c6/javascript/util/leak_jquery.js
quelle
Webpack-Benutzer fügen Ihrem
plugins
Array das Folgende hinzu .quelle
import {$, jQuery} from 'jquery';
aber id hat nicht funktioniert, glaube ich, weil es in anderen Modulen nicht definiert (importiert) ist.quelle
Ich habe diese genaue Syntax noch nicht veröffentlicht und sie hat in einer ES6 / Webpack-Umgebung funktioniert:
Entnommen direkt von der NPM-Seite von jQuery . Hoffe das hilft jemandem.
quelle
Wenn Sie keine JS-Build-Tools / NPM verwenden, können Sie Jquery direkt einschließen als:
Sie können den Import überspringen (Zeile 1), wenn Sie jquery bereits mithilfe des Skript-Tags unter head eingefügt haben.
quelle
import 'filepath/jquery.js'
einen Fehler ausgelöst, dass das Modul die gewünschte Funktion nicht exportiert oder $ beim Anblick des Wortes keine Funktion oder nur ein SyntaxError istfrom
.Installieren und speichern Sie sie zunächst in package.json:
Zweitens fügen Sie einen Alias in der Webpack-Konfiguration hinzu:
Es funktioniert bei mir mit der letzten jquery (3.2.1) und jquery-ui (1.12.1).
Weitere Informationen finden Sie in meinem Blog: http://code.tonytuan.org/2017/03/webpack-import-jquery-ui-in-es6-syntax.html
quelle
Jquery importieren (Ich habe mit 'npm install [email protected]' installiert)
Fügen Sie Ihren gesamten Code, der von jquery abhängt, in diese Methode ein
oder deklarieren Sie die Variable $ nach dem Import
quelle
Ich wollte die bereits erstellte jQuery (von jquery.org) verwenden, und alle hier genannten Lösungen funktionierten nicht. Um dieses Problem zu beheben, wurden die folgenden Zeilen hinzugefügt, damit es in nahezu jeder Umgebung funktioniert:
quelle
Sie können so importieren
quelle
Mein Projektstapel ist: ParcelJS + WordPress
WordPress hat jQuery v1.12.4 selbst und ich habe auch jQuery v3 ^ als Modul für andere abhängige Module importiert sowie
bootstrap/js/dist/collapse
zum Beispiel ... Leider kann ich aufgrund anderer modularer Abhängigkeiten von WordPress nicht nur eine jQuery-Version belassen. Und natürlich gibt es Konflikte zwischen zwei jquery-Versionen. Denken Sie auch daran, dass wir für dieses Projekt zwei Modi haben, in denen Wordpress (Apache) / ParcelJS (NodeJS) ausgeführt wird, was alles ein wenig schwierig macht. Bei der Lösung dieses Konflikts wurde also gesucht, manchmal brach das Projekt links, manchmal rechts ab. SO ... Meine endgültige Lösung (ich hoffe es so ...) ist:Ich habe immer noch nicht verstanden, wie ich selbst bin, aber diese Methode funktioniert. Fehler und Konflikte zweier jQuery-Versionen treten nicht mehr auf
quelle
Wenn Sie Webpack 4 verwenden, lautet die Antwort: Verwenden Sie das
ProvidePlugin
. Ihre Dokumentation behandelt speziell angle.js mit jquery- Anwendungsfall:Das Problem ist, dass bei Verwendung der
import
Syntax angle.js und jquery immer importiert werden, bevor Sie window.jQuery jquery zuweisen können (import
Anweisungen werden immer zuerst ausgeführt, unabhängig davon, wo sie sich im Code befinden!). Dies bedeutet, dass Angle window.jQuery immer als undefiniert anzeigt, bis Sie es verwendenProvidePlugin
.quelle
Pika ist ein CDN, das sich um die Bereitstellung von Modulversionen beliebter Pakete kümmert
Skypack ist Pika, daher können Sie auch Folgendes verwenden:
import * as $ from 'https://cdn.pika.dev/jquery@^3.5.1';
quelle