17

I'm currently trying to add Jquery to my vue-cli project. I am aware of the missbehaviour it can produce, but anyway; Since there is no build/webpack.base.conf.js anymore I tried editing vue.config.js by adding:

 module.exports {
    ...
    chainWebpack: config => {
    config.plugin('define').tap(definitions => {
      definitions[0] = Object.assign(definitions[0], {
        $: 'jquery',
        jquery: 'jquery',
        'window.jQuery': 'jquery',
        jQuery: 'jquery',
        _: 'lodash'
      })
      return definitions
    })
  }
   ...
 }

or

const webpack = require('webpack')

module.exports {
   ...
 plugins: [
  new webpack.ProvidePlugin({
     $: 'jquery',
     jquery: 'jquery',
     'window.jQuery': 'jquery',
     jQuery: 'jquery'
   })
  ]
   ...
 }

Both options don't seem to work. With #1 nothing seems to happen, with #2 I get the compile error; "plugins" is not allowed or 'ProvidePlugin' is unresolved and when I try to import jQuery directly in main.js and define the $ operator, jquery stays undefinded when I try to use it.

Big thank you in advance!

nonNumericalFloat
  • 1,348
  • 2
  • 15
  • 32

4 Answers4

28

Solved it by adding to main.js

window.$ = window.jQuery = require('jquery');

That did it for me and jQuery is now available globally.

Another approach would be;

Vue.use({
install: function(Vue, options){
    Vue.prototype.$jQuery = require('jquery'); // you'll have this.$jQuery anywhere in your vue project
    }
});

I hope this will help someone stumbling over the same problem in the future. If you still can't figure it out, check this question or have a look at the documentation.

edit: make sure you ran npm install jquery.

AdityaDees
  • 1,022
  • 18
  • 39
nonNumericalFloat
  • 1,348
  • 2
  • 15
  • 32
  • 1
    remembering that is necessary to have Jquery module available in npm, you can do it doing: `npm install jquery` – Canatto Filipe May 24 '19 at 12:39
  • Nowadays I would consider this as bad advice. As Vue is highly reactive, Jquery may change application state without lettings Vue know about the new state. This may cause inconsistent state-changes. Use causiously :) See https://vuejsdevelopers.com/2017/05/20/vue-js-safely-jquery-plugin/ – nonNumericalFloat Oct 15 '21 at 15:37
18

#2 You forget to add configureWebpack into vue.config.js

const webpack = require('webpack')
module.exports = {
  configureWebpack: {
    plugins: [
      new webpack.ProvidePlugin({
        $: 'jquery',
        jquery: 'jquery',
        'window.jQuery': 'jquery',
        jQuery: 'jquery'
      })
    ]
  },
}
Rdzawobrody
  • 181
  • 4
8

I did it by following steps:

first install jquery

npm install jquery --save-dev

in any component or view:

<script>

import jQuery from "jquery";
const $ = jQuery;
window.$ = $;

....
....
....

or as above answer, both are same:

window.$ = window.jQuery = require("jquery");

now you can use anywhere in the page, for globally availability, simply follow the above said answer.

ArifMustafa
  • 4,617
  • 5
  • 40
  • 48
0

Add the following in vue.config.js

chainWebpack: (config) => {
  config
    .plugin('provide')
    // eslint-disable-next-line global-require
    .use(require('webpack').ProvidePlugin, [{
      'window.Quill': 'quill/dist/quill.js',
      Quill: 'quill/dist/quill.js',
      'window.jQuery': 'jquery/src/jquery.js',
      jQuery: 'jquery/src/jquery.js',
    }]);
},
Vee6
  • 1,527
  • 3
  • 21
  • 40
  • While this code may solve the question, [including an explanation](//meta.stackexchange.com/q/114762) of how and why this solves the problem would really help to improve the quality of your post, and probably result in more up-votes. Remember that you are answering the question for readers in the future, not just the person asking now. Please [edit] your answer to add explanations and give an indication of what limitations and assumptions apply. – Yunnosch Jun 11 '21 at 06:15