Comment faire pour importer jquery en utilisant ES6 syntaxe?
Je suis en train d'écrire une nouvelle application à l'aide de (JavaScript) ES6
syntaxe à travers babel
transpiler et la preset-es2015
plugins, ainsi que semantic-ui
pour le style.
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>
Structure de projet
.
├── app/
│ ├── index.js
├── assets/
├── dist/
│ ├── scripts/
│ │ ├── jquery.min.js
├── index.html
├── node_modules/
│ ├── jquery/
│ │ ├── dist/
│ │ │ ├── jquery.min.js
├── package.json
└── tests/
paquet.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}]
]
}
Question
À l'aide de classique <script>
balise à l'importation jquery
fonctionne bien, mais je suis en train d'utiliser l'ES6 syntaxe.
- Comment puis-je importer
jquery
pour satisfairesemantic-ui
à l'aide de ES6 importation de syntaxe? - Dois-je importer à partir de la
node_modules/
répertoire ou mondist/
(où je copie tout)?
- Ainsi, l'importation de
dist
n'a pas de sens puisque c'est votre dossier de distribution avec la production de prêt application. La construction de votre application doit prendre ce qui est à l'intérieur du nœud de modules et de l'ajouter à la dist dossier, jQuery inclus. - Ni ne l'importation à partir d'un fichier scss. À moins qu'il y a certains plugin génial je suis absent dehors sur!
- il s'appelle sassify, un browserify plugin. Je suis inspirant moi-même à partir de oncletom gist
- Je vais vérifier ça, merci!
- la syntaxe semble étrange, mais à l'aide de "besoin" pour css / sass fichiers est encouragé à construire des outils comme webpack + babel. par exemple. require("../node_modules/bootstrap/dist/css/bootstrap.min.css");
- D'accord, c'est une approche intéressante pour la modularisation - heureux que j'ai demandé!
- pas de soucis, à apprécier ici, nous discutons de ES6 syntaxe pour le module d'importation et de ne pas commonjs, mais en fin de compte même des concepts en jeu.
- Pourquoi ne pas l'utiliser à l'échelle mondiale. Quel est le problème avec ça?
Vous devez vous connecter pour publier un commentaire.
index.js
Tout d'abord, comme @nem suggéré dans un commentaire, l'importation doit être effectuée à partir de
node_modules/
:Prochain, le glob –
* as
– à tort je sais ce que l'objet que je suis à l'importation (par exemplejQuery
et$
), donc une straigforward instruction d'importation fonctionne.Dernier vous avez besoin de l'exposer à d'autres scripts à l'aide de la
window.$ = $
.Puis, j'ai de l'importation, à la fois
$
etjQuery
pour couvrir tous les usages,browserify
éliminer les chevauchements, donc pas de frais généraux ici! ^o^ywindow.$ = $
. Je ne comprends pas pourquoi c'est nécessaire. N'aurez pas d'autres scripts seront automatiquement groupés en une seulejs
script lors de browserify t-il de la magie?jquery
ou$
à le rendre disponible à tous (voir stackoverflow.com/a/9895261/802365)import {$,jQuery} from 'jquery';
? Pourquoi tant de nombreuses importations?jQuery
?Module '"jquery"' has no exported member 'jQuery'
ouModule '"jquery"' has no default export
ce qui me manque s'il vous plaît?import "../node_modules/jquery/dist/jquery.js"; const element = $("#abc");
Basé sur la solution d'Édouard Lopez, mais en deux lignes:
window.$ = window.jQuery = require('jquery');
import
(module ES) et le one-liner ne semble pas possible avecimport
. (Quelqu'un s'en soucie?)D'importer la totalité de JQuery contenu dans la portée Globale. Cela insère $ dans le champ d'application actuel, contenant tous de l'export des fixations de la JQuery.
Maintenant l' $ appartient à l'objet window.
Accepté la réponse n'a pas de travail pour moi
remarque : l'utilisation cumulatif js ne sais pas si cette réponse appartient ici
après
npm i --enregistrer jquery
dans custom.js
ou
je recevais erreur :
Module ...node_modules/jquery/dist/jquery.js ne pas exporter jQuery
ou
Module ...node_modules/jquery/dist/jquery.js ne pas exporter $
rollup.config.js
au lieu de correctif cumulatif injecter, essayé
paquet.json
Cela a fonctionné :
enlevé le cumulatif injecter et de commonjs plugins
puis dans custom.js
Vous pouvez créer un module convertisseur comme ci-dessous:
Cela permettra d'éliminer des variables globales introduit par jQuery et l'exportation de l'objet jQuery en tant que par défaut.
Ensuite l'utiliser dans votre script:
Ne pas oublier de charger un module dans votre document:
http://plnkr.co/edit/a59ETj3Yo2PJ0Aqkxbeu?p=preview
Si ça aide quelqu'un, javascript déclarations d'importation sont hissés. Ainsi, si une bibliothèque a un lien de dépendance (par exemple, bootstrap) sur jquery dans l'espace de noms global (de la fenêtre), cela ne fonctionnera PAS:
C'est parce que l'importation de bootstrap est hissé et évalué avant de jQuery est attaché à la fenêtre.
Un moyen de contourner ce problème est de ne pas importer jQuery directement, mais au lieu de l'importation d'un module qui lui-même importations jQuery ET l'attache à la fenêtre.
où
leaked-jquery
ressemblePar exemple, https://github.com/craigmichaelmartin/weather-app--birch/blob/4d9f3b03719e0a2ea3fb5ddbbfc453a10e9843c6/javascript/util/leak_jquery.js
webpack utilisateurs, ajouter le ci-dessous pour votre
plugins
tableau.import {$, jQuery} from 'jquery';
mais l'id ne fonctionne pas, je crois, car il n'est pas défini (importés) dans d'autres modules.Tout d'abord, de les installer et de les enregistrer dans le paquet.json:
Deuxièmement, ajouter un alias dans webpack de configuration:
Fonctionner pour moi avec la dernière jquery(3.2.1) et jquery-ui(1.12.1).
Voir mon blog pour plus de détails: http://code.tonytuan.org/2017/03/webpack-import-jquery-ui-in-es6-syntax.html
Importer jquery (j'ai installé avec "npm install [email protected]')
Mis tout ton code qui dépend de jquery à l'intérieur de cette méthode
ou de déclarer la variable $ après l'importation
Je voulais utiliser le alread-buildy jQuery (à partir de jquery.org) et toutes les solutions mentionnées ici ne fonctionne pas, comment j'ai résolu ce problème est d'ajouter les lignes suivantes, qui devrait permettre de travailler sur presque tous les environnements:
Vous pouvez importer comme ce
Mon projet de la pile est: ParcelJS + WordPress
WordPress ai jQuery v1.12.4 lui-même et j'ai également importer jQuery v3^ comme module pour d'autres en fonction des modules ainsi que
bootstrap/js/dist/collapse
, par exemple... Malheureusement, je ne peux pas laisser une seule version jQuery due à d'autres WordPress modulaire dépendances.Et bien sûr il y a conflit entre deux version jquery. Aussi garder à l'esprit que nous avons obtenu deux modes pour ce projet en cours d'exécution WordPress(Apache) /ParcelJS (NodeJS), la sorcière faire tout petit peu de difficulté. Donc à la solution de ce conflit était à la recherche, parfois, le projet a éclaté sur la gauche, parfois sur le côté droit.
ALORS... Mon finall solution (j'espère que ça donc...) est:
Je ne comprend toujours pas comment moi-même, mais cette méthode fonctionne. Des erreurs et des conflits des deux version jQuery ne se posent plus