J'écris une nouvelle application utilisant la ES6
syntaxe (JavaScript) via babel
transpiler et les 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 du projet
.
├── 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}]
]
}
Question
L'utilisation de <script>
balises classiques pour importer jquery
fonctionne bien, mais j'essaie d'utiliser la syntaxe ES6.
- Comment importer
jquery
pour satisfaire à l'semantic-ui
aide de la syntaxe d'importation ES6? - Dois-je importer depuis le
node_modules/
répertoire ou mondist/
(où je copie tout)?
javascript
jquery
ecmascript-6
browserify
semantic-ui
Édouard Lopez
la source
la source
dist
n'a pas de sens puisqu'il s'agit de votre dossier de distribution avec une application prête pour la production. La création de votre application doit prendre ce qui se trouve à l'intérieur des modules de nœuds et l'ajouter au dossier dist, jQuery inclus.Réponses:
index.js
Tout d'abord, comme @nem l'a suggéré dans le commentaire, l'importation doit être effectuée à partir de
node_modules/
:Ensuite, le glob -
* as
- est faux car je sais quel objet j'importe ( par exemplejQuery
et$
), donc une instruction d' importation straigforward fonctionnera.Enfin, vous devez l'exposer à d'autres scripts en utilisant le
window.$ = $
.Ensuite, j'importe comme les deux
$
etjQuery
pour couvrir toutes les utilisations,browserify
supprimez la duplication d'import, donc pas de frais généraux ici! ^ o ^ yla source
window.$ = $
. Je ne comprends pas pourquoi c'est nécessaire. Les autres scripts ne seront-ils pas automatiquement regroupés dans un seuljs
script lorsque browserify est-ce magique?import {$,jQuery} from 'jquery';
? Pourquoi tant d'importations?jQuery
-à- dire ?Module '"jquery"' has no exported member 'jQuery'
ouModule '"jquery"' has no default export
que me manque-t-il s'il vous plaît?Basé sur la solution d'Édouard Lopez, mais en deux lignes:
la source
window.$ = window.jQuery = require('jquery');
require
(CommonJS) n'est pasimport
(module ES) et le one-liner ne semble pas possible avecimport
. (Someone cares?)Importez tout le contenu de JQuery dans l'étendue globale. Cela insère $ dans la portée actuelle, contenant toutes les liaisons exportées à partir de JQuery.
Maintenant, le $ appartient à l'objet window.
la source
Vous pouvez créer un convertisseur de module comme ci-dessous:
Cela supprimera les variables globales introduites par jQuery et exportera l'objet jQuery par défaut.
Ensuite, utilisez-le dans votre script:
N'oubliez pas de le charger en tant que module dans votre document:
http://plnkr.co/edit/a59ETj3Yo2PJ0Aqkxbeu?p=preview
la source
La réponse acceptée n'a pas fonctionné pour moi
Remarque: l'utilisation de rollup js ne sait pas si cette réponse appartient ici
après
npm i --save jquery
in 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 n'exporte pas $
rollup.config.js
au lieu de rollup inject, essayé
package.json
Cela a fonctionné:
suppression des plugins rollup inject et commonjs
puis dans custom.js
la source
namedExports
qu'il n'existe plus dans le plugin commonjsSi cela aide quelqu'un, les instructions d'importation javascript sont levées. Ainsi, si une bibliothèque a une dépendance (par exemple bootstrap) sur jquery dans l'espace de noms global (fenêtre), cela ne fonctionnera PAS:
Ceci est dû au fait que l'importation de bootstrap est hissée et évaluée avant que jQuery ne soit attaché à window.
Une façon de contourner ce problème est de ne pas importer directement jQuery, mais plutôt d'importer un module qui lui-même importe jQuery ET l'attache à la fenêtre.
où
leaked-jquery
ressembleEG, https://github.com/craigmichaelmartin/weather-app--birch/blob/4d9f3b03719e0a2ea3fb5ddbbfc453a10e9843c6/javascript/util/leak_jquery.js
la source
utilisateurs webpack, ajoutez ce qui suit à votre
plugins
baie.la source
import {$, jQuery} from 'jquery';
mais l'id n'a pas fonctionné, je crois parce qu'il n'est pas défini (importé) dans d'autres modules.la source
Je n'ai pas encore vu cette syntaxe exacte publiée, et cela a fonctionné pour moi dans un environnement ES6 / Webpack:
Tiré directement de la page NPM de jQuery . J'espère que cela aide quelqu'un.
la source
Si vous n'utilisez aucun outil de build JS / NPM, vous pouvez directement inclure Jquery comme:
Vous pouvez ignorer l'importation (ligne 1) si vous avez déjà inclus jquery en utilisant la balise de script sous l'en-tête.
la source
import 'filepath/jquery.js'
jeté une erreur sur le module n'exportant pas la fonction que je voulais ou $ n'étant pas une fonction ou juste une SyntaxError à la vue du motfrom
.Tout d'abord, installez-les et enregistrez-les dans package.json:
Deuxièmement, ajoutez un alias dans la configuration du pack Web:
Cela fonctionne pour moi avec les derniers 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
la source
Importer jquery (j'ai installé avec 'npm install [email protected]')
Mettez tout votre code qui dépend de jquery dans cette méthode
ou déclarer la variable $ après l'importation
la source
Je voulais utiliser le jQuery déjà construit (de jquery.org) et toutes les solutions mentionnées ici ne fonctionnaient pas.J'ai résolu ce problème en ajoutant les lignes suivantes qui devraient le faire fonctionner sur presque tous les environnements:
la source
Vous pouvez importer comme ça
la source
Ma pile de projets est: ParcelJS + WordPress
WordPress a lui-même jQuery v1.12.4 et j'ai également importé jQuery v3 ^ comme module pour d'autres modules dépendants ainsi que
bootstrap/js/dist/collapse
, par exemple ... Malheureusement, je ne peux pas laisser une seule version de jQuery à cause d'autres dépendances modulaires WordPress. Et bien sûr, il y a un conflit entre deux versions de jquery. Gardez également à l'esprit que nous avons deux modes pour ce projet exécutant Wordpress (Apache) / ParcelJS (NodeJS), ce qui rend tout un peu difficile. Donc, la solution de ce conflit était la recherche, parfois le projet s'est cassé à gauche, parfois à droite. SO ... Ma dernière solution (je l'espère ...) est:Je ne comprenais toujours pas comment moi-même, mais cette méthode fonctionne. Les erreurs et conflits de deux versions de jQuery ne surviennent plus
la source
Si vous utilisez Webpack 4, la réponse est d'utiliser le
ProvidePlugin
. Leur documentation couvre spécifiquement angular.js avec le cas d'utilisation de jquery :Le problème est que lors de l'utilisation de la
import
syntaxe angular.js et jquery seront toujours importés avant que vous n'ayez la possibilité d'assigner jquery à window.jQuery (lesimport
instructions seront toujours exécutées en premier, peu importe où elles se trouvent dans le code!). Cela signifie que angular verra toujours window.jQuery comme non défini jusqu'à ce que vous l'utilisiezProvidePlugin
.la source
Pika est un CDN qui se charge de fournir des versions de modules de packages populaires
Skypack est Pika, vous pouvez donc également utiliser:
import * as $ from 'https://cdn.pika.dev/jquery@^3.5.1';
la source