Piszę nową aplikację przy użyciu ES6
składni (JavaScript) poprzez babel
transpiler i preset-es2015
wtyczki, a także semantic-ui
dla stylu.
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>
Struktura projektu
.
├── 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}]
]
}
Pytanie
Używanie klasycznego <script>
tagu do importowania jquery
działa dobrze, ale próbuję użyć składni ES6.
- Jak zaimportować,
jquery
aby spełnićsemantic-ui
wymagania składni importu ES6? - Czy powinienem importować z
node_modules/
katalogu, czy z mojegodist/
(gdzie kopiuję wszystko)?
javascript
jquery
ecmascript-6
browserify
semantic-ui
Édouard Lopez
źródło
źródło
dist
nie ma sensu, ponieważ jest to folder dystrybucyjny z aplikacją gotową do produkcji. Budowanie aplikacji powinno wziąć to, co znajduje się w modułach węzłów i dodać je do folderu dist, w tym jQuery.Odpowiedzi:
index.js
Po pierwsze, jak zasugerował @nem w komentarzu, import należy wykonać z
node_modules/
:Następnie glob -
* as
- jest błędny, ponieważ wiem, jaki obiekt importuję ( np.jQuery
I$
), więc prosta instrukcja importu będzie działać.Na koniec musisz udostępnić go innym skryptom przy użyciu rozszerzenia
window.$ = $
.Następnie importuję jako oba
$
i,jQuery
aby pokryć wszystkie zastosowania, usuwambrowserify
powielanie importu, więc nie ma tutaj narzutów! ^ o ^ yźródło
window.$ = $
. Nie rozumiem, dlaczego jest to potrzebne. Czy inne skrypty nie zostaną automatycznie połączone w jedenjs
skrypt, gdy browserify to magia?import {$,jQuery} from 'jquery';
? Dlaczego tak dużo importu?jQuery
?Module '"jquery"' has no exported member 'jQuery'
alboModule '"jquery"' has no default export
czego mi brakuje?Oparty na rozwiązaniu Édouarda Lopeza, ale w dwóch liniach:
źródło
window.$ = window.jQuery = require('jquery');
require
(CommonJS) nie jestimport
(moduł ES), a jednoliniowy nie wydaje się możliwy w przypadkuimport
. (Ktoś to obchodzi?)Zaimportuj całą zawartość JQuery w zakresie globalnym. Spowoduje to wstawienie znaku $ do bieżącego zakresu, zawierającego wszystkie wyeksportowane powiązania z JQuery.
Teraz $ należy do obiektu window.
źródło
Możesz stworzyć konwerter modułów jak poniżej:
Spowoduje to usunięcie zmiennych globalnych wprowadzonych przez jQuery i wyeksportowanie obiektu jQuery jako domyślnego.
Następnie użyj go w swoim skrypcie:
Nie zapomnij załadować go jako modułu w swoim dokumencie:
http://plnkr.co/edit/a59ETj3Yo2PJ0Aqkxbeu?p=preview
źródło
Zaakceptowana odpowiedź nie zadziałała dla mnie
uwaga: używając pakietu rollup js nie wiem, czy ta odpowiedź należy tutaj
po
npm i --save jquery
in custom.js
lub
byłem coraz błąd : Moduł ... node_modules / jQuery / dist / jquery.js nie eksportować jQuery
lub
module ... node_modules / jQuery / dist / jquery.js nie eksportować $
rollup.config.js
zamiast rollup wstrzyknąć, próbował
package.json
To zadziałało:
usunęliśmy wtyczki do pakietu zbiorczego i wtyczki commonjs
następnie w custom.js
źródło
namedExports
że nie istnieje już we wtyczce commonjsJeśli to komuś pomoże, instrukcje importu javascript są podnoszone. Tak więc, jeśli biblioteka ma zależność (np. Bootstrap) od jquery w globalnej przestrzeni nazw (oknie), to NIE zadziała:
Dzieje się tak, ponieważ import bootstrap jest podnoszony i oceniany przed dołączeniem jQuery do okna.
Jednym ze sposobów obejścia tego problemu jest nie importowanie jQuery bezpośrednio, ale zaimportowanie modułu, który sam importuje jQuery ORAZ dołącza go do okna.
gdzie
leaked-jquery
wyglądaNp. Https://github.com/craigmichaelmartin/weather-app--birch/blob/4d9f3b03719e0a2ea3fb5ddbbfc453a10e9843c6/javascript/util/leak_jquery.js
źródło
użytkownicy webpacka, dodaj poniższe do swojej
plugins
tablicy.źródło
import {$, jQuery} from 'jquery';
ale id nie zadziałało, wydaje mi się, że nie jest zdefiniowane (importowane) w innych modułach.źródło
Nie widziałem jeszcze opublikowanej dokładnej składni i zadziałała dla mnie w środowisku ES6 / Webpack:
Zrobione bezpośrednio ze strony NPM jQuery . Mam nadzieję, że to komuś pomoże.
źródło
Jeśli nie używasz żadnych narzędzi do budowania JS / NPM, możesz bezpośrednio dołączyć Jquery jako:
Możesz pominąć import (linia 1), jeśli już włączyłeś jquery za pomocą tagu script pod nagłówkiem.
źródło
import 'filepath/jquery.js'
powodowała błąd dotyczący modułu nie eksportującego funkcji, którą chciałem, lub $ nie będącego funkcją lub po prostu SyntaxError na widok tego słowafrom
.Przede wszystkim zainstaluj i zapisz je w pliku package.json:
Po drugie, dodaj alias w konfiguracji webpacka:
Działa dla mnie z ostatnim jquery (3.2.1) i jquery-ui (1.12.1).
Zobacz mój blog, aby uzyskać szczegółowe informacje: http://code.tonytuan.org/2017/03/webpack-import-jquery-ui-in-es6-syntax.html
źródło
Importuj jquery (zainstalowałem z 'npm install [email protected]')
Umieść cały swój kod zależny od jquery wewnątrz tej metody
lub zadeklaruj zmienną $ po imporcie
źródło
Chciałem użyć już buildy jQuery (z jquery.org) i wszystkie wymienione tutaj rozwiązania nie działały, jak naprawiłem ten problem, dodając następujące linie, które powinny sprawić, że będzie działać w prawie każdym środowisku:
źródło
Możesz importować w ten sposób
źródło
Mój stos projektów to: ParcelJS + WordPress
WordPress dostał sam jQuery v1.12.4 i mam też zaimportować jQuery v3 ^ jako moduł dla innych zależnych modułów, a także
bootstrap/js/dist/collapse
np. ... Niestety nie mogę zostawić tylko jednej wersji jQuery ze względu na inne zależności modułowe WordPress. I oczywiście istnieje konflikt między dwiema wersjami jquery. Pamiętaj również, że mamy dwa tryby dla tego projektu z uruchomionym Wordpress (Apache) / ParcelJS (NodeJS), co sprawia, że wszystko jest trochę trudne. Tak więc rozwiązaniem tego konfliktu było szukanie, czasem projekt pękał po lewej, czasem po prawej stronie. WIĘC ... Moje ostateczne rozwiązanie (mam nadzieję, że tak ...) to:Nadal nie rozumiałem, jak ja, ale ta metoda działa. Nie występują już błędy i konflikty dwóch wersji jQuery
źródło
Jeśli używasz Webpack 4, odpowiedzią jest użycie
ProvidePlugin
. Ich dokumentacja w szczególności obejmuje angular.js z przypadkiem użycia jquery :Problem polega na tym, że przy używaniu
import
składni angular.js i jquery będą zawsze importowane, zanim będzie można przypisać jquery do window.jQuery (import
instrukcje będą zawsze uruchamiane jako pierwsze, bez względu na to, gdzie są w kodzie!). Oznacza to, że angular zawsze będzie widzieć window.jQuery jako niezdefiniowane, dopóki nie użyjeszProvidePlugin
.źródło
Pika to CDN, który zajmuje się dostarczaniem wersji modułowych popularnych pakietów
Skypack to Pika, więc możesz również użyć:
import * as $ from 'https://cdn.pika.dev/jquery@^3.5.1';
źródło