Как импортировать 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/ (куда я копирую все)?

881   9  

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
в обычае.js

import {$, jQuery} from 'jquery';

или

import {jQuery as $} from 'jquery';

я получил : Модуль...папки node_modules/jQuery с/Р/и jQuery.js не экспортирует jQuery
или
Модуль...папки node_modules/jQuery с/Р/и jQuery.js не экспортирует $
сведения.конфиг.js

export 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.

import {jQuery as $} from 'jquery';

если это кому-то помогает, операторы импорта 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;

например, https://github.com/craigmichaelmartin/weather-app--birch/blob/4d9f3b03719e0a2ea3fb5ddbbfc453a10e9843c6/javascript/util/leak_jquery.js

прежде всего, установите и сохраните их в пакете.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

    Ничего не найдено.