javascript - L'utilisation de jquery dans Vue échoue. Peut-il être utilisé lorsque jquery est introduit, mais le plug-in qui introduit jquery n'est pas défini? ?
漂亮男人
漂亮男人 2017-05-18 10:59:43
0
6
903

L'utilisation de jquery dans vue a échoué. Il peut être utilisé en introduisant jquery, mais le plug-in qui introduit jquery n'est pas défini
Mon idée est que puisque l'introduction de l'importation n'est pas prise en charge, puis-je changer le code source. pour supporter la modularisation ?

漂亮男人
漂亮男人

répondre à tous(6)
黄舟

J'ai rencontré le même problème que l'affiche originale. J'ai cité le plug-in tiers de jquery jquery.mockjax.js, puis j'ai appelé require('./assets/jquery.mockjax.js') dans main.js. , lorsque $ apparaît, il n'est pas défini. require('./assets/jquery.mockjax.js'),出现$此时是undefined。

我是这样解决的:
通过npm install的方式去安装的jquery-mockjax,此时发现可以用了,$也有定义了。

然后我尝试了找了一下两者的不同:
首先通过npm install安装的jquery-mockjax 的源码和我之前直接引入的js文件是相同的。

(function(root, factory) {
    'use strict';
    console.log(arguments);
    console.log('root', root);
    // AMDJS module definition
    if ( typeof define === 'function' && define.amd && define.amd.jQuery ) {
        console.log('this is in amdjs module definition');
        define(['jquery'], function($) {
            return factory($, root);
        });

    // CommonJS module definition
    } else if ( typeof exports === 'object' && module.exports) {
        console.log('this is CommonJs module definition');

        // NOTE: To use Mockjax as a Node module you MUST provide the factory with
        // a valid version of jQuery and a window object (the global scope):
        // var mockjax = require('jquery.mockjax')(jQuery, window);

        module.exports = factory;

    // Global jQuery in web browsers
    } else {
        console.log('this is global jquery in web browsers');
        return factory(root.jQuery || root.$, root);
    }
}(this, function($, window) {
    'use strict';

这是源码部分,采用UMD的方式。

方式一:
通过require('./assets/jquery.mockjax.js')的方式去引入该文件,webpack编译后的代码是直接进入第三个判断分支进行判断,直接调用了该工厂函数,webpack在处理的时候this传入的是modules.exports对象,此时module.exports对象是找不到jquery的,因此报错。尝试将源码中的this改为global后,是可以解决的。网上也提供了不修改源码,通过imports-loader的方式将this赋值为window。require('import-loader?this=>window!./assets/jquery.mockjax.js')
方式二:
通过require('jquery-mockjax')

Voici comment je l'ai résolu :
J'ai installé jquery-mockjax via npm install et j'ai découvert qu'il pouvait être utilisé et que $ est également défini.

Ensuite, j'ai essayé de trouver la différence entre les deux :
Premièrement, le code source de jquery-mockjax installé via npm install est le même que le fichier js que j'ai importé directement auparavant.

rrreee

Il s'agit de la partie code source, utilisant la méthode UMD. 🎜 🎜Méthode 1 :
Introduire le fichier via require('./assets/jquery.mockjax.js') Le code compilé par webpack entrera directement dans la troisième branche de jugement. la fonction d'usine est directement appelée. Lorsque le webpack est en cours de traitement, cela est transmis dans l'objet modules.exports. À ce stade, l'objet module.exports ne trouve pas jquery, une erreur est donc signalée. Cela peut être résolu après avoir essayé de changer cela dans le code source en global. Il existe également une méthode sur Internet qui ne modifie pas le code source et l'attribue à la fenêtre via le chargeur d'importation. require('import-loader?this=>window!./assets/jquery.mockjax.js')
Méthode 2 :
Passer require('jquery-mockjax '), le fichier compilé par webpack entre directement dans la deuxième branche. En lisant le fichier compilé, on constate que webpack définit directement la condition de jugement de la deuxième branche sur true, qui est la méthode d'introduction par défaut de Commonjs. ce qui explique également pourquoi cette méthode ne signale pas les erreurs. 🎜 🎜À travers cet exemple, j'espère qu'il pourra donner quelques conseils à l'affiche. Si le plug-in tiers jquery de l'affiche est également au format UMD, il est très probable qu'il s'agisse de la même erreur que celle que j'ai rencontrée. 🎜 🎜Mais j'ai toujours eu une question, pourquoi la compilation des packages npm par webpack est-elle différente de la compilation des fichiers js directement importés ? Je n'ai pas réussi à trouver où cette partie est expliquée dans la documentation officielle ? J'espère également que le maître ci-dessus pourra me donner une réponse. 🎜
为情所困

Ajoutez d'abord "jquery" : "^2.2.3" aux dépendances dans package.json, puis npm install

Ajoutez-le à webpack.base.conf.js

var webpack = require("webpack")

Ajouter à la fin du module.exports

plugins: [
    new webpack.optimize.CommonsChunkPlugin('common.js'),
    new webpack.ProvidePlugin({
        jQuery: "jquery",
        $: "jquery"
    })
]

Alors assurez-vous de npm exécuter à nouveau dev

Vous pouvez l'importer dans main.js import $ from 'jquery'

刘奇

Aucun plug-in (surtout les anciens plug-ins) ne peut être importé. Sinon, et npm ne trouve pas le téléchargement source de ce plug-in, il n'y a que deux options :
1. où src entre en jeu

2. Modifiez vous-même le plug-in et exportez la méthode pour exposer le plug-in

小葫芦

La raison pour laquelle le plug-in jq ne peut pas être utilisé est que lorsque le plug-in jq est introduit, le $ dans le js qui exécute ce plug-in n'a pas été défini dans la vue globale, donc la méthode est introuvable. Maintenant, je sais qu'il existe deux méthodes :
(1)
1. Introduisez jq.js et js du plug-in jq dans index.html
2. Ajoutez la variable globale $ dans webpack.base.conf.js,

externals: {
    jquery: 'window.$'
  }

3. Dans les composants qui doivent utiliser le plug-in jq, exigez jq, var $ = require('jquery').
(2)
1.Introduisez jq.js dans index.html
2.Dans les composants qui doivent utiliser le plug-in jq, importez le js du plug-in et exigez simplement jq.

Si ça ne marche pas, dis-le-moi encore

曾经蜡笔没有小新

Pourquoi êtes-vous si réticent à utiliser jq au lieu de vue ? . .

洪涛

Ce plug-in n'est conforme à aucune spécification de système modulaire, vous ne pouvez donc pas obtenir l'objet ou le constructeur de plug-in correspondant via l'importation, et ce plug-in nécessite que jQuery soit une propriété de la fenêtre (variable globale), donc il est plus difficile d'utiliser l'approche modulaire :

import $ from 'jquery'
global.$ = global.jQuery = $
require('path/to/jquery.particleground.js')

Alors vous pourrez peut-être appeler $('#a').particleground(), c'est juste une possibilité, je ne l'ai pas testé moi-même

En fait, il devrait être possible d'utiliser un script pour introduire jquery et ce plug-in directement dans index.html Si eslint est utile, définissez global $

.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal