Je souhaite exposer l'objet jQuery à l'objet de fenêtre global qui est accessible dans la console développeur dans le navigateur. Maintenant, dans ma configuration Webpack, j'ai les lignes suivantes:
plugins: [
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery'
})
]
Ces lignes ajoutent les définitions jQuery à chaque fichier dans mes modules webpack. Mais lorsque je construis le projet et que j'essaye d'accéder à jQuery dans la console du développeur comme ceci:
window.$;
window.jQuery;
il dit que ces propriétés ne sont pas définies ...
Y'a t'il un moyen d'arranger cela?
javascript
jquery
webpack
ferbolg
la source
la source
this: 'window'
aussi? Étant donné que de nombreuses bibliothèques supposent que lathis
variable est l'objet WindowRéponses:
Vous devez utiliser le chargeur d'exposition .
Vous pouvez soit le faire lorsque vous en avez besoin:
ou vous pouvez le faire dans votre configuration:
MISE À JOUR : À partir du webpack 2, vous devez utiliser exposer-loader au lieu d' exposer :
la source
ProvidePlugin
doit principalement utilisé dans les situations où les bibliothèques tierces dépendent de la présence d'une variable globale.{test: /jquery\.js$/, loader: 'expose?jQuery!expose?$'}
$ = require('jquery'); window.jQuery = $; window.$ = $;
? (pas besoinexpose-loader
)module: { rules: [{ test: require.resolve('jquery'), use: [{ loader: 'expose-loader', options: 'jQuery' },{ loader: 'expose-loader', options: '$' }] }] }
. C'est le seul moyen pour que jQuery soit exposé et il utilise la nouvelle syntaxe module.rules .FournirPlugin remplace un symbole dans une autre source via l'importation respective, mais n'expose pas le symbole sur l'espace de noms global. Un exemple classique sont les plugins jQuery. La plupart d'entre eux s'attendent simplement
jQuery
à être définis globalement. Avec le,ProvidePlugin
vous vous assurez que jQuery est une dépendance (par exemple chargée avant) et que l'occurrence dejQuery
dans leur code serait remplacée par l'équivalent brut de webpackrequire('jquery')
.Si vous avez des scripts externes reposant sur le symbole pour être dans l'espace de noms global (comme disons un JS hébergé en externe, des appels Javascript dans Selenium ou simplement en accédant au symbole dans la console du navigateur), vous souhaitez utiliser à la
expose-loader
place.En bref: FournirPlugin gère les dépendances au moment de la construction pour les symboles globaux tandis que le
expose-loader
gère les dépendances d'exécution avec les symboles globaux.la source
On dirait que l'
window
objet est exposé dans tous les modules.Pourquoi ne pas simplement importer / exiger
JQuery
et mettre:Vous devrez vous assurer que cela se produit avant d'exiger / d'importer tout module qui l'utilise
window.JQuery
, soit dans un module requérant, soit dans le module où il est utilisé.la source
require
alors que nonimport
JQuery
.import
, vous pouvez obtenir une erreur, carimport
s sont triés en haut du fichier etrequire
restent là où ils ont été placés. Ainsi, l'ordre d'exécution ne change queimport
lorsque la variable de fenêtre n'est pas définie.Cela a toujours fonctionné pour moi. y compris pour webpack 3
window.$ = window.jQuery = require("jquery");
la source
Aucun de ces éléments n'a fonctionné pour moi. (et je n'aime vraiment pas la syntaxe exposer-loader). Au lieu,
J'ai ajouté à webpack.config.js:
Que tous les modules ont accès via jQuery via $.
Vous pouvez l'exposer à la fenêtre en ajoutant ce qui suit à l'un de vos modules fournis par webpack:
la source
Mise à jour pour Webpack v2
Installez exposer-loader comme décrit par Matt Derrick:
Insérez ensuite l'extrait de code suivant dans votre
webpack.config.js
:(à partir de la documentation expose-loader )
la source
window.jQuery = require('jquery');
Dans mon cas fonctionne
la source