Estou escrevendo um novo aplicativo usando a ES6
sintaxe (JavaScript) através do babel
transpiler e dos preset-es2015
plugins, bem como semantic-ui
para o 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>
Estrutura do projeto
.
├── 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}]
]
}
Questão
O uso da <script>
tag clássica para importar jquery
funciona bem, mas estou tentando usar a sintaxe do ES6.
- Como importar
jquery
para satisfazersemantic-ui
usando a sintaxe de importação ES6? - Devo importar do
node_modules/
diretório ou do meudist/
(onde copio tudo)?
javascript
jquery
ecmascript-6
browserify
semantic-ui
Édouard Lopez
fonte
fonte
dist
não faz sentido, pois essa é sua pasta de distribuição com o aplicativo pronto para produção. A criação do seu aplicativo deve pegar o que há dentro dos módulos do nó e adicioná-lo à pasta dist, incluindo o jQuery.Respostas:
index.js
Primeiro, como o @nem sugeriu no comentário, a importação deve ser feita a partir de
node_modules/
:Em seguida, o glob -
* as
- está errado, pois sei qual objeto estou importando ( por exemplo,jQuery
e$
), portanto, uma declaração de importação simples funcionará.Por último, você precisa expô-lo a outros scripts usando o
window.$ = $
.Em seguida, importo como ambos
$
e,jQuery
para cobrir todos os usos,browserify
remova a duplicação de importação, portanto não há custos adicionais aqui! ^ o ^ yfonte
window.$ = $
. Não entendo por que isso é necessário. Outros scripts não serão agrupados automaticamente em um únicojs
script quando o browserify for mágico?import {$,jQuery} from 'jquery';
? Por que tantas importações?jQuery
?Module '"jquery"' has no exported member 'jQuery'
ou oModule '"jquery"' has no default export
que estou perdendo, por favor?Com base na solução de Édouard Lopez, mas em duas linhas:
fonte
window.$ = window.jQuery = require('jquery');
require
(CommonJS) não éimport
(módulo ES) e o one-liner não parece possívelimport
. (Alguém se importa?)Importe todo o conteúdo do JQuery no escopo Global. Isso insere $ no escopo atual, contendo todas as ligações exportadas do JQuery.
Agora o $ pertence ao objeto da janela.
fonte
Você pode criar um conversor de módulo como abaixo:
Isso removerá as variáveis globais introduzidas pelo jQuery e exportará o objeto jQuery como padrão.
Em seguida, use-o no seu script:
Não esqueça de carregá-lo como um módulo no seu documento:
http://plnkr.co/edit/a59ETj3Yo2PJ0Aqkxbeu?p=preview
fonte
A resposta aceita não funcionou para mim,
note: usando o rollup js não sei se essa resposta pertence aqui
após o
npm i --save jquery
em custom.js
ou
Eu estava recebendo erro : Module ... node_modules / jquery / dist / jquery.js não exporta jQuery
ou
Module ... node_modules / jquery / dist / jquery.js não exporta $
rollup.config.js
em vez de injetar rollup, tentei
package.json
Funcionou:
removidos os plugins de injeção de rollup e commonjs
depois em custom.js
fonte
namedExports
que não existe mais no plugin commonjsSe isso ajudar alguém, as instruções de importação de javascript são içadas. Portanto, se uma biblioteca tiver uma dependência (por exemplo, inicialização) no jquery no espaço de nomes global (janela), isso NÃO funcionará:
Isso ocorre porque a importação do bootstrap é içada e avaliada antes do jQuery ser anexado à janela.
Uma maneira de contornar isso é não importar o jQuery diretamente, mas sim importar um módulo que importa o jQuery E o anexa à janela.
onde
leaked-jquery
parecePor exemplo: https://github.com/craigmichaelmartin/weather-app--birch/blob/4d9f3b03719e0a2ea3fb5ddbbfc453a10e9843c6/javascript/util/leak_jquery.js
fonte
usuários do webpack, adicione o seguinte ao seu
plugins
array.fonte
import {$, jQuery} from 'jquery';
mas o id não funcionou, acredito porque não está definido (importado) em outros módulos.fonte
Ainda não vi essa sintaxe exata, e funcionou para mim em um ambiente ES6 / Webpack:
Retirado diretamente da página NPM do jQuery . Espero que isso ajude alguém.
fonte
Se você não estiver usando nenhuma ferramenta de construção JS / NPM, poderá incluir diretamente o Jquery como:
Você pode pular a importação (Linha 1) se já tiver incluído o jquery usando a tag de script abaixo da cabeça.
fonte
import 'filepath/jquery.js'
lançou algum erro sobre o módulo não exportar a função que eu queria ou $ não ser uma função ou apenas um SyntaxError ao ver a palavrafrom
.Antes de tudo, instale e salve-os no package.json:
Em segundo lugar, adicione um alias na configuração do webpack:
Ele funciona para mim com o último jquery (3.2.1) e jquery-ui (1.12.1).
Veja meu blog para obter detalhes: http://code.tonytuan.org/2017/03/webpack-import-jquery-ui-in-es6-syntax.html
fonte
Importar jquery (eu instalei com 'npm install [email protected]')
Coloque todo o seu código que depende do jquery dentro desse método
ou declarar a variável $ após a importação
fonte
Eu queria usar o jQuery já construído (em jquery.org) e todas as soluções mencionadas aqui não funcionaram. Como eu corrigi esse problema, adicionei as seguintes linhas que devem fazê-lo funcionar em quase todos os ambientes:
fonte
Você pode importar assim
fonte
Minha pilha de projetos é: ParcelJS + WordPress
O WordPress possui o jQuery v1.12.4 e eu também importo o jQuery v3 ^ como módulo para outros módulos dependentes, bem como
bootstrap/js/dist/collapse
, por exemplo ... Infelizmente, não posso deixar apenas uma versão do jQuery devido a outras dependências modulares do WordPress. E é claro que há conflito entre duas versões de jquery. Lembre-se também de que temos dois modos para este projeto executando o Wordpress (Apache) / ParcelJS (NodeJS), o que dificulta um pouco as coisas. Então, a solução para esse conflito estava sendo pesquisada, às vezes o projeto foi interrompido à esquerda, às vezes do lado direito. SO ... Minha solução final (espero que sim ...) é:Eu ainda não entendia como eu mesmo, mas esse método funciona. Erros e conflitos de duas versões do jQuery não aparecem mais
fonte
Se você estiver usando o Webpack 4, a resposta é usar o
ProvidePlugin
. A documentação deles cobre especificamente o angular.js com o caso de uso jquery :O problema é que ao usar a
import
sintaxe angular.js e o jquery sempre será importado antes que você tenha a chance de atribuir o jquery ao window.jQuery (asimport
instruções sempre serão executadas primeiro, não importa onde estejam no código!). Isso significa que angular sempre verá window.jQuery como indefinido até você usarProvidePlugin
.fonte
Pika é uma CDN que cuida de fornecer versões de módulos de pacotes populares
O Skypack é o Pika, então você também pode usar:
import * as $ from 'https://cdn.pika.dev/jquery@^3.5.1';
fonte