Estoy escribiendo una nueva aplicación usando la ES6
sintaxis (JavaScript) a través del babel
transpiler y los preset-es2015
complementos, así como semantic-ui
para el estilo.
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>
Estructura del proyecto
.
├── 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}]
]
}
Pregunta
Usar la <script>
etiqueta clásica para importar jquery
funciona bien, pero estoy tratando de usar la sintaxis ES6.
- ¿Cómo importo
jquery
para satisfacer elsemantic-ui
uso de la sintaxis de importación ES6? - ¿Debo importar desde el
node_modules/
directorio o midist/
(donde copio todo)?
javascript
jquery
ecmascript-6
browserify
semantic-ui
Édouard Lopez
fuente
fuente
dist
no tiene sentido ya que esa es su carpeta de distribución con la aplicación lista para producción. La construcción de su aplicación debe tomar lo que hay dentro de los módulos de nodo y agregarlo a la carpeta dist, jQuery incluido.Respuestas:
index.js
Primero, como sugirió @nem en el comentario, la importación debe hacerse desde
node_modules/
:A continuación, el glob -
* as
está mal, ya que sé qué objeto estoy importando ( por ejemplo,jQuery
y$
), por lo que funcionará una declaración de importación sencilla .Por último, debe exponerlo a otros scripts utilizando
window.$ = $
.Luego, importo como ambos
$
yjQuery
para cubrir todos los usos,browserify
elimino la duplicación de importación, ¡así que no hay gastos generales aquí! ^ o ^ yfuente
window.$ = $
? No entiendo por qué es necesario. ¿No sejs
incluirán automáticamente otros scripts en un solo script cuando browserify sea mágico?import {$,jQuery} from 'jquery';
? ¿Por qué tantas importaciones?jQuery
?Module '"jquery"' has no exported member 'jQuery'
oModule '"jquery"' has no default export
¿qué me estoy perdiendo por favor?Basado en la solución de Édouard Lopez, pero en dos líneas:
fuente
window.$ = window.jQuery = require('jquery');
require
(CommonJS) no esimport
(módulo ES) y el one-liner no parece posible conimport
. (¿A alguien le importa?)Importe todo el contenido de JQuery en el ámbito Global. Esto inserta $ en el ámbito actual, que contiene todos los enlaces exportados desde JQuery.
Ahora el $ pertenece al objeto de la ventana.
fuente
Puede crear un convertidor de módulo como el siguiente:
Esto eliminará las variables globales introducidas por jQuery y exportará el objeto jQuery como predeterminado.
Luego úsalo en tu script:
No olvide cargarlo como módulo en su documento:
http://plnkr.co/edit/a59ETj3Yo2PJ0Aqkxbeu?p=preview
fuente
La respuesta aceptada no funcionó para mí
nota: el uso de rollup js no sé si esta respuesta pertenece aquí
después de
npm i --save jquery
en custom.js
o
estaba recibiendo un error : Módulo ... node_modules / jquery / dist / jquery.js no exporta jQuery
o
Module ... node_modules / jquery / dist / jquery.js no exporta $
rollup.config.js
en lugar de inyectar rollup, intenté
package.json
Esto funcionó:
eliminó los paquetes de inyección acumulada y los complementos commonjs
luego en custom.js
fuente
namedExports
ya no existe en el complemento commonjsSi ayuda a alguien, se levantan las declaraciones de importación de JavaScript. Por lo tanto, si una biblioteca tiene una dependencia (por ejemplo, bootstrap) en jquery en el espacio de nombres global (ventana), esto NO funcionará:
Esto se debe a que la importación de bootstrap se levanta y evalúa antes de que jQuery se adjunte a la ventana.
Una forma de evitar esto es no importar jQuery directamente, sino importar un módulo que importa jQuery Y lo adjunta a la ventana.
donde
leaked-jquery
parecePor ejemplo, https://github.com/craigmichaelmartin/weather-app--birch/blob/4d9f3b03719e0a2ea3fb5ddbbfc453a10e9843c6/javascript/util/leak_jquery.js
fuente
usuarios de paquetes web, agregue lo siguiente a su
plugins
matriz.fuente
import {$, jQuery} from 'jquery';
pero la identificación no funcionó, creo que porque no está definida (importada) en otros módulos.fuente
Todavía no vi esta sintaxis exacta publicada, y funcionó para mí en un entorno ES6 / Webpack:
Tomado directamente de la página NPM de jQuery . Espero que esto ayude a alguien.
fuente
Si no está utilizando ninguna herramienta de compilación JS / NPM, puede incluir directamente Jquery como:
Puede omitir la importación (Línea 1) si ya incluyó jquery usando la etiqueta de script debajo de la cabeza.
fuente
import 'filepath/jquery.js'
arrojó algún error acerca de que el módulo no exportaba la función que quería o que $ no era una función o simplemente un SyntaxError a la vista de la palabrafrom
.En primer lugar, instálelos y guárdelos en package.json:
En segundo lugar, agregue un alias en la configuración del paquete web:
Me funciona con el último jquery (3.2.1) y jquery-ui (1.12.1).
Vea mi blog para más detalles: http://code.tonytuan.org/2017/03/webpack-import-jquery-ui-in-es6-syntax.html
fuente
Importar jquery (instalé con 'npm install [email protected]')
Ponga todo su código que depende de jquery dentro de este método
o declarar $ variable después de la importación
fuente
Quería usar el jQuery alread-buildy (de jquery.org) y todas las soluciones mencionadas aquí no funcionaron, la forma en que solucioné este problema fue agregar las siguientes líneas que deberían hacerlo funcionar en casi todos los entornos:
fuente
Puedes importar así
fuente
Mi pila de proyectos es: ParcelJS + WordPress
WordPress obtuvo jQuery v1.12.4 y también importé jQuery v3 ^ como módulo para otros módulos dependientes, así como
bootstrap/js/dist/collapse
, por ejemplo ... Desafortunadamente, no puedo dejar solo una versión de jQuery debido a otras dependencias modulares de WordPress. Y, por supuesto, surge un conflicto entre dos versiones jquery. También tenga en cuenta que tenemos dos modos para este proyecto que ejecuta Wordpress (Apache) / ParcelJS (NodeJS), lo que dificulta todo un poco. Entonces, la solución para este conflicto fue buscar, a veces el proyecto se rompió a la izquierda, a veces en el lado derecho. SO ... Mi solución final (espero que sea así ...) es:Todavía no entendía cómo era yo, pero este método funciona. Los errores y conflictos de dos versiones de jQuery ya no surgen
fuente
Si está usando Webpack 4, la respuesta es usar el
ProvidePlugin
. Su documentación cubre específicamente angular.js con el caso de uso de jquery :El problema es que cuando se usa la
import
sintaxis angular.js y jquery siempre se importarán antes de que tenga la oportunidad de asignar jquery a window.jQuery (¡lasimport
instrucciones siempre se ejecutarán primero sin importar dónde se encuentren en el código!). Esto significa que angular siempre verá window.jQuery como indefinido hasta que lo useProvidePlugin
.fuente
Pika es un CDN que se encarga de proporcionar versiones de módulos de paquetes populares
Skypack es Pika, por lo que también puedes usar:
import * as $ from 'https://cdn.pika.dev/jquery@^3.5.1';
fuente