Как глобально объявить jQuery внутри проекта Vue-CLI 3?

Я видел много вопросов об этом на SO и в других местах, но пока мне не повезло.

Для небольшого контекста я создал веб-сайт SPA на основе проекта Vue, который я создал с помощью «старой» команды. Не помню, какой, но выглядел он примерно так:

vue init webpack <my project>

Недавно я понял, что мне будет проще поддерживать, обновлять и улучшать Vue-CLI 3 по разным контекстным причинам, поэтому я установил @vue/cli, создал новый проект и начал копировать / вставлять файлы из моего старого проекта в новый. .

В старом проекте был каталог build с различными конфигурационными файлами webpack, и мне нужно было, чтобы jQuery был установлен глобально для пакета, который я хотел использовать, поэтому я добавил следующее в «базовую» конфигурацию Webpack.

new webpack.ProvidePlugin({
  $: 'jquery',
  jQuery: 'jquery'
}),

Однако с новым проектом все, что у меня есть в качестве файла конфигурации, - это babel.config.js и vue.config.js в корне проекта, нет ни build, ни каталога config.

Я попытался установить jQuery глобально с помощью следующих строк в моем файле main.js:

import jQuery from 'jquery'

window.$ = window.jQuery = jQuery
global.$ = global.jQuery = jQuery

Но каждый раз, когда я перезагружаю свою страницу, я получаю следующее сообщение:

jQuery is not defined

Итак, пока я использую CDN-версию jQuery, но мне не нравится это решение.

Как мне продолжить работу над проектом Vue-CLI 3?

заранее спасибо

Не надо! Суть современного механизма шаблонов, такого как Vue, заключается в том, что вы не используете устаревшую библиотеку, такую ​​как jQuery. Только не надо!

Adrian Brand 20.12.2018 13:03

Дело в том, что я не могу найти или заставить пакет vanilla js работать в контексте Vue ..

Jaeger 20.12.2018 13:05

Вам просто нужно использовать import jquery from jquery в начале каждого .js / .vue, в котором он вам нужен, а затем jquery ("# ​​id"). Anywhere) `

Anuga 20.12.2018 14:04

Вы, возможно, могли бы добавить его в Vue() и получить к нему доступ через this.$jquery внутри файлов .vue, вы еще не пробовали.

Anuga 20.12.2018 14:05
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
4
1 668
3

Ответы 3

Вы можете перейти на public / index.html и добавить тег скрипта в тело с маршрутом к вашему файлу jquery или cdn. Если вы поместите его в общедоступную папку jquery, это будет выглядеть так:

<body>
    <div id = "app"></div>
    <script type = "text/javascript" src = "/jquery/jquery-3.4.1.min.js"></script>
</body>

Я не уверен, что это именно то, что вам нужно, но это сделает его доступным во всем вашем проекте.

Если вы используете плагины JQuery, вы должны сделать это в своем main.js:

/*
* If using Jquery plugins they will expect to be available in the global namespace, 
* which isn’t the case when you import/require it. So manually assign jquery to 
* window. Use require instead of import because the imports are hoisted to the
* top of a file by the compiler, which would break VueJS code.
*/
const $ = require('jquery')
window.jQuery = window.$ = $;

Вы можете использовать плагины Vue. Это позволяет добавлять новое свойство к каждому отдельному компоненту.

В main.js

import Vue from 'vue';
import jQuery from 'jquery';

Vue.use({
  install (V) {
    V.$jQuery = V.prototype.$jQuery = jQuery
  }
})

Тогда вы можете использовать jQuery везде в компоненте.

В MyComponent.vue

import Vue from 'vue'

export default {
  mounted () {
    this.$jQuery('h1').text('Hello World')
    Vue.$jQuery('h1').text('Hello World')
  }
}

Еще один файл js.

В util.js

import Vue from 'vue'

Vue.$jQuery('h1').text('Hello World')

Другие вопросы по теме