jQuery-ui et webpack, comment le gérer en module?

Une idée de comment faire face à cela? Je veux dire que jquery-ui ne semble pas être amd et je ne sais pas comment gérer cela , aucune idée ?

49
demandé sur François Richard 2015-11-30 15:05:08

5 réponses

Vous avez de la chance j'ai fait ça juste qu'hier, c'est plutôt facile.

npm install --save jquery jquery-ui

Assurez-vous que vous avez jQuery aliased à résoudre avec le plugin dans le webpack.config.js

...
plugins: [
    new webpack.ProvidePlugin({
      "$":"jquery",
      "jQuery":"jquery",
      "window.jQuery":"jquery"
    }),
...

Puis inclure deux alias dans le webpack.config.js

  1. Le dossier node_modules
  2. le dossier jQuery-ui

``````

resolve : {
    alias: {
      // bind version of jquery-ui
      "jquery-ui": "jquery-ui/jquery-ui.js",      
      // bind to modules;
      modules: path.join(__dirname, "node_modules"),

Assurez-vous que jquery est chargé en premier dans le fichier de démarrage de votre application.

var $ = require("jquery"),
        require("jquery-ui");

Si vous avez besoin d'utiliser un thème, configurez CSS-loader et le fichier-loader. N'oubliez pas de npm installer ces chargeurs.

module: {
    loaders: [
      { test: /\.css$/, loader: "style!css" },
      { test: /\.(jpe?g|png|gif)$/i, loader:"file" },

Et utiliser dans votre fichier de démarrage de l'application.

require("modules/jquery-ui/themes/black-tie/jquery-ui.css");
require("modules/jquery-ui/themes/black-tie/jquery-ui.theme.css");
27
répondu wendellmva 2018-03-01 13:24:46

Pour une raison quelconque, jquery-ui n'a pas bien joué avec webpack. J'ai dû exiger jquery-ui-bundle à la place.

npm i -S jquery-ui-bundle

Et ensuite l'exiger après jquery par exemple

require('jquery');
require('jquery-ui-bundle');
55
répondu KhaledMohamedP 2017-10-30 12:19:00

jquery-ui-dist et jquery-ui-bundle ne semblent pas être maintenu par le jquery-ui. Après jquery-ui v1. 12, Il est possible d'utiliser le paquet officiel jquery-ui de npm avec webpack.

Mettre à jour jquery-ui à 1.12 en mettant à jour package.json et npm install.

Vous pouvez require chaque widget comme cela.

require("jquery-ui/ui/widgets/autocomplete");
require("jquery-ui/ui/widgets/draggable");

Si vous avez utilisé require("jquery-ui") avant, vous devez le remplacer par des importations distinctes pour chaque widget. Je pense que la nouvelle façon est meilleure car elle ne regroupera que le code pour le widget dont nous avons besoin utiliser.

Voir documentation sur l'utilisation du paquet npm officiel 1.12.

43
répondu Aruna Herath 2017-02-26 05:55:08

La réponse acceptée ne fonctionne pas pour moi car le paquet jQuery-ui sur NPM n'est pas pré-construit et ne contient donc pas jquery-ui.js; le paquet devra être construit avant utilisation ou tous les widgets inclus / utilisés individuellement.

Le moyen le plus rapide pour que tout le paquet fonctionne était de télécharger d'abord la version distribuable:

npm install jquery-ui-dist --save

J'avais besoin d'ajouter un alias pour jquery-ui-dist pour éviter une erreur 'Impossible de trouver le module' (en utilisant simplement require('jquery-ui-dist') ne fonctionnera pas, car le .js filename est différent), par ajouter ceci à webpack.config.js:

resolve: {
    alias: {
        'jquery-ui': 'jquery-ui-dist/jquery-ui.js'
    }
},

Enfin, vous pouvez l'utiliser dans le .fichier js où les modules sont chargés:

var jQuery = require('jquery');
require('jquery-ui'); 

Alternativement, vous pouvez éviter d'avoir à {[8] } les scripts lors du chargement des modules, et d'avoir à déclarer jQuery en tant que variable, en utilisant ProvidePlugin dans votre webpack.config.js:

 plugins: [
    new webpack.ProvidePlugin({
        'jQuery': 'jquery',
        '$': 'jquery',
        'global.jQuery': 'jquery'
    })
],
11
répondu chrBrd 2017-01-07 02:45:42

Webpack-jQuery-ui

Webpack-jquery-ui - utilisez ce plugin, par exemple si vous utilisez Rails 5, exécutez

 yarn add webpack-jquery-ui

Lorsque le plugin jQuery UI démarre, il vérifie si jQuery est fourni, donc

Ajoutez ce code à votre fichier de configuration webpacker (partagé.js - si vous l'utilisez avec Rails 5)

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

Ajoutez ces lignes dans le code de votre application.

require('webpack-jquery-ui');
require('webpack-jquery-ui/css');

Pour corriger ActionController::InvalidAuthenticityToken dans jquery.ajax

, Vous devez passer un authenticity_token paramètre avec tous vos PUT, POST et DELETE demandes.

Pour ce faire, vous pouvez généralement le récupérer à partir de l'en-tête avec $('[name="csrf-token"]')[0].content

Donc votre demande ressemblerait à quelque chose comme:

var that = this;
$.ajax({
  url: navigator_item.url,
  data: { authenticity_token: $('[name="csrf-token"]')[0].content},
  method: 'DELETE',
  success: function(res) {
   ...
  }
});

- je inclure jQuery dans mon application d'une autre manière

Au Lieu d'utiliser:

plugins: [
new webpack.ProvidePlugin({...

Vous devez ajouter 'jquery':' jQuery/src/jquery ' aux alias du fichier de configuration webpack:

module.exports = {
  resolve: {
    alias: {
        'jquery': 'jquery/src/jquery'
    }
  }

Il fournira le nom du module 'jquery'. jQuery UI vérifie ce nom sur init.

Alors en toi App.fichier js que vous écrivez:

import $ from 'jquery'

import 'webpack-jquery-ui/css'
import 'webpack-jquery-ui/sortable' // if you need only sortable widget.

window.jQuery = $;
window.$ = $; // lazy fix if you want to use jQuery in your inline scripts.
8
répondu Stanley Shauro 2018-07-07 10:20:07