Как импортировать jquery с помощью синтаксиса ES6?
я пишу новое приложение с помощью (JavaScript)ES6 синтаксис через babel transpiler и preset-es2015 плагины, а также semantic-ui для стиля.
.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'));
.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/
пакета.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? - я должен импортировать из или мой
dist/(куда я копирую все)?
9 ответов:
.js
import {$,jQuery} from 'jquery'; // export for others scripts to use window.$ = $; window.jQuery = jQuery;во-первых, как @nem предложенный в комментарии, импорт должен быть сделан из
node_modules/:ну, импорт из
dist/не имеет смысла, так как это ваша папка дистрибутива с готовым к производству приложением. Создание вашего приложения должно принимать то, что внутриnode_modules/и добавить его вdist/папка, включая jQuery.далее Глоб –
* as- это неправильно, так как я знаю, какой объект я импортирую (напримерjQueryи$), так что straigforward импорт заявлением будет работать.наконец, нужно выставить его на другие скрипты с помощью
window.$ = $.затем я импортирую как
$иjQueryчтобы покрыть все обычаи,browserifyудалить дублирование импорта, так что никаких накладных расходов здесь! ^o^y
на основе решения Эдуарда Лопеса, но в двух строках:
import jQuery from "jquery"; window.$ = window.jQuery = jQuery;
принятый ответ не работа для меня
Примечание: использование накопительного пакета js не знаю, если этот ответ принадлежит здесь
после
npm i -- save jquery
в обычае.jsimport {$, jQuery} from 'jquery';или
import {jQuery as $} from 'jquery';я получил : Модуль...папки node_modules/jQuery с/Р/и jQuery.js не экспортирует jQuery
или
Модуль...папки node_modules/jQuery с/Р/и jQuery.js не экспортирует $
сведения.конфиг.jsexport default { entry: 'source/custom', dest: 'dist/custom.min.js', plugins: [ inject({ include: '**/*.js', exclude: 'node_modules/**', jQuery: 'jquery', // $: 'jquery' }), nodeResolve({ jsnext: true, }), babel(), // uglify({}, minify), ], external: [], format: 'iife', //'cjs' moduleName: 'mycustom', };вместо rollup inject, попробовал
commonjs({ namedExports: { // left-hand side can be an absolute path, a path // relative to the current directory, or the name // of a module in node_modules // 'node_modules/jquery/dist/jquery.js': [ '$' ] // 'node_modules/jquery/dist/jquery.js': [ 'jQuery' ] 'jQuery': [ '$' ] }, format: 'cjs' //'iife' };пакета.json
"devDependencies": { "babel-cli": "^6.10.1", "babel-core": "^6.10.4", "babel-eslint": "6.1.0", "babel-loader": "^6.2.4", "babel-plugin-external-helpers": "6.18.0", "babel-preset-es2015": "^6.9.0", "babel-register": "6.9.0", "eslint": "2.12.0", "eslint-config-airbnb-base": "3.0.1", "eslint-plugin-import": "1.8.1", "rollup": "0.33.0", "rollup-plugin-babel": "2.6.1", "rollup-plugin-commonjs": "3.1.0", "rollup-plugin-inject": "^2.0.0", "rollup-plugin-node-resolve": "2.0.0", "rollup-plugin-uglify": "1.0.1", "uglify-js": "2.7.0" }, "scripts": { "build": "rollup -c", },это работает :
удален накопительный пакет inject и CommonJS Плагиныimport * as jQuery from 'jquery';затем в обычай.js
$(function () { console.log('Hello jQuery'); });
пользователи webpack, добавьте ниже к вашему
pluginsмассив.let plugins = [ // expose $ and jQuery to global scope. new webpack.ProvidePlugin({ $: 'jquery', jQuery: 'jquery' }) ];
импортируйте все содержимое JQuery в глобальную область. Это вставляет $ в текущую область, содержащую все экспортированные привязки из JQuery.
import * as $ from 'jquery';теперь $ принадлежит объекту window.
если это кому-то помогает, операторы импорта javascript поднимаются. Таким образом, если библиотека имеет зависимость (например, bootstrap) от jquery в глобальном пространстве имен (window), это не будет работать:
import {$,jQuery} from 'jquery'; window.$ = $; window.jQuery = jQuery; import 'bootstrap/dist/js/bootstrap.min';это связано с тем, что импорт bootstrap поднимается и оценивается до того, как jQuery будет присоединен к window.
один из способов обойти это - не импортировать jQuery напрямую, а вместо этого импортировать модуль, который сам импортирует jQuery и присоединяет его к окно.
import jQuery from './util/leaked-jquery'; import 'bootstrap/dist/js/bootstrap.min';здесь
leaked-jqueryвыглядит так:import {$,jQuery} from 'jquery'; window.$ = $; window.jQuery = jQuery; export default $; export jQuery;
прежде всего, установите и сохраните их в пакете.json:
npm i --save jquery npm i --save jquery-ui-distво-вторых, добавьте псевдоним в конфигурацию webpack:
resolve: { root: [ path.resolve(__dirname, '../node_modules'), path.resolve(__dirname, '../src'), ], alias: { 'jquery-ui': 'jquery-ui-dist/jquery-ui.js' }, extensions: ['', '.js', '.json'], }Он работает для меня с последним 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 [email protected]')
import 'jquery/jquery.js';поместите весь свой код, который зависит от jquery внутри этого метода
+function ($) { // your code }(window.jQuery);или объявить переменную $ после импорта
var $ = window.$
Comments