Я пишу новое приложение, используя ES6
синтаксис (JavaScript) через babel
транспилятор и preset-es2015
плагины, а также semantic-ui
для стиля.
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>
Структура проекта
.
├── 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}]
]
}
Вопрос
Использование классического <script>
тега для импорта jquery
работает нормально, но я пытаюсь использовать синтаксис ES6.
- Как мне импортировать,
jquery
чтобы удовлетворитьsemantic-ui
синтаксис импорта ES6? - Импортировать из
node_modules/
каталога или из моегоdist/
(куда я все копирую)?
javascript
jquery
ecmascript-6
browserify
semantic-ui
Эдуард Лопес
источник
источник
dist
не имеет смысла, поскольку это ваша папка распространения с готовым к эксплуатации приложением. При создании приложения нужно взять то, что находится внутри модулей узлов, и добавить его в папку dist, включая jQuery.Ответы:
index.js
Во-первых, как предложил @nem в комментарии, импорт должен выполняться из
node_modules/
:Далее, глоб -
* as
- неверен, поскольку я знаю, какой объект я импортирую ( например,jQuery
и$
), поэтому будет работать простой оператор импорта .Наконец, вам нужно предоставить его другим скриптам, используя расширение
window.$ = $
.Затем я импортирую как оба,
$
и,jQuery
чтобы охватить все случаи использования,browserify
удаляю дублирование импорта, так что здесь никаких накладных расходов! ^ о ^ уисточник
window.$ = $
. Я не понимаю, зачем это нужно. Разве другие скрипты не будут автоматически объединены в одинjs
скрипт, когда browserify творит чудеса?import {$,jQuery} from 'jquery';
? Почему так много импорта?jQuery
?Module '"jquery"' has no exported member 'jQuery'
либоModule '"jquery"' has no default export
что мне не хватает, пожалуйста?На основе решения Эдуара Лопеса, но в двух строках:
источник
window.$ = window.jQuery = require('jquery');
require
(CommonJS) не являетсяimport
(модуль ES), и однострочный вариант не представляется возможным сimport
. (Кого-то волнует?)Импортируйте все содержимое JQuery в глобальную область. Это вставляет $ в текущую область, содержащую все экспортированные привязки из JQuery.
Теперь $ принадлежит объекту окна.
источник
Вы можете создать конвертер модулей, как показано ниже:
Это удалит глобальные переменные, введенные jQuery, и экспортирует объект jQuery по умолчанию.
Затем используйте его в своем скрипте:
Не забудьте загрузить его как модуль в свой документ:
http://plnkr.co/edit/a59ETj3Yo2PJ0Aqkxbeu?p=preview
источник
Принятый ответ не сработал для меня,
примечание: использование rollup js не знает, принадлежит ли этот ответ здесь
после
npm i --save jquery
в custom.js
или
Я получал ошибку : Module ... node_modules / jquery / dist / jquery.js не экспортирует jQuery
или
Module ... node_modules / jquery / dist / jquery.js не экспортирует $
rollup.config.js
вместо инъекции накопления пробовал
package.json
Это сработало:
удалены плагины rollup inject и commonjs
затем в custom.js
источник
namedExports
в плагине commonjs больше не существуетЕсли это кому-то поможет, поднимаются операторы импорта javascript. Таким образом, если библиотека имеет зависимость (например, bootstrap) от jquery в глобальном пространстве имен (окне), это НЕ будет работать:
Это связано с тем, что импорт начальной загрузки поднимается и оценивается до того, как jQuery будет прикреплен к окну.
Один из способов обойти это - не импортировать jQuery напрямую, а вместо этого импортировать модуль, который сам импортирует jQuery И прикрепляет его к окну.
где
leaked-jquery
выглядитНапример, https://github.com/craigmichaelmartin/weather-app--birch/blob/4d9f3b03719e0a2ea3fb5ddbbfc453a10e9843c6/javascript/util/leak_jquery.js
источник
пользователи webpack, добавьте ниже в свой
plugins
массив.источник
import {$, jQuery} from 'jquery';
но id не работал, я считаю, потому что он не определен (импортирован) в других модулях.источник
Я еще не видел этот точный синтаксис, и он работал у меня в среде ES6 / Webpack:
Взято прямо со страницы NPM jQuery . Надеюсь, это кому-то поможет.
источник
Если вы не используете какие-либо инструменты сборки JS / NPM, вы можете напрямую включить JQuery как:
Вы можете пропустить импорт (строка 1), если вы уже включили jquery, используя тег скрипта под заголовком.
источник
import 'filepath/jquery.js'
простого, выдавал некоторую ошибку о том, что модуль не экспортирует нужную мне функцию, или $ не является функцией, или просто SyntaxError при виде словаfrom
.Прежде всего, установите и сохраните их в package.json:
Во-вторых, добавьте в конфигурацию webpack псевдоним:
Он работает для меня с последними jquery (3.2.1) и jquery-ui (1.12.1).
Подробности см. В моем блоге: http://code.tonytuan.org/2017/03/webpack-import-jquery-ui-in-es6-syntax.html
источник
Импортировать jquery (я установил с помощью npm install jquery@1.9.1)
Поместите весь свой код, который зависит от jquery, внутри этого метода
или объявить переменную $ после импорта
источник
Я хотел использовать уже построенный jQuery (от jquery.org), и все упомянутые здесь решения не работали. Я исправил эту проблему, добавив следующие строки, которые должны заставить его работать почти во всех средах:
источник
Вы можете импортировать так
источник
Мой стек проектов: ParcelJS + WordPress
WordPress получил сам jQuery v1.12.4 , и я также импортировал jQuery v3 ^ в качестве модуля для других зависимых модулей, а также
bootstrap/js/dist/collapse
, например ... К сожалению, я не могу оставить только одну версию jQuery из-за других модульных зависимостей WordPress. И, конечно, возникает конфликт между двумя версиями jquery. Также имейте в виду, что у нас есть два режима для этого проекта под управлением Wordpress (Apache) / ParcelJS (NodeJS), что немного усложняет все. Так что искали решение этого конфликта, иногда проект ломался по левой, иногда по правой стороне. ТАК ... Мое окончательное решение (я надеюсь, что да ...):Я так и не понял, как сам, но этот способ работает. Ошибки и конфликты двух версий jQuery больше не возникают
источник
Если вы используете Webpack 4, ответ - использовать расширение
ProvidePlugin
. Их документация специально охватывает angular.js с вариантом использования jquery :Проблема в том, что при использовании
import
синтаксиса angular.js и jquery всегда будут импортированы, прежде чем у вас будет возможность назначить jquery для window.jQuery (import
операторы всегда будут запускаться первыми, независимо от того, где они находятся в коде!). Это означает, что angular всегда будет видеть window.jQuery как undefined, пока вы не используетеProvidePlugin
.источник
Pika - это CDN, которая предоставляет модульные версии популярных пакетов.
Skypack - это Pika, поэтому вы также можете использовать:
import * as $ from 'https://cdn.pika.dev/jquery@^3.5.1';
источник