Jsdom: "Anfrage einer Abhängigkeit ist ein Ausdruck" (Bei Bündelung mit Webpack)

Erstellt am 24. Nov. 2017  ·  5Kommentare  ·  Quelle: jsdom/jsdom

Basisinformation:

  • Node.js-Version: 8.9.1
  • jsdom-Version: 11.4.0

Beim Bündeln meiner Serveranwendung (die intern JSDOM verwendet) mit Web Pack, erhalte ich die folgende Warnung:

WARNING in .../node_modules/jsdom/lib/jsdom/utils.js
    203:21-40 Critical dependency: the request of a dependency is an expression

Der fragliche Code lautet:

["canvas", "canvas-prebuilt"].some(moduleName => {
  try {
    exports.Canvas = require(moduleName);

Obwohl es vielleicht nicht sehr üblich ist, den Servercode zu bündeln, finde ich es ziemlich schön, von 266 MB ( src/ und node_modules/ ) auf eine einzige 6 MB JS-Datei (in meinem Fall) zu gehen.

Würden Sie den obigen Import so umschreiben, dass er immer statisch ist? Oder sehen Sie darin ein Defizit des Bundlers, dass dieser nicht erkennen kann, dass in der Praxis auf die möglichen Module geschlossen werden könnte?

(Wenn es in if mit literalen require Parametern umgeschrieben würde, müssen Benutzer möglicherweise trotzdem eine Ausnahme hinzufügen, da weder canvas noch canvas-prebuilt standardmäßig verfügbar sind , aber dann wäre zumindest das Problem explizit behandelt worden (und der Benutzer müsste sicher sein, dass er diese nicht verwendet)).

Hilfreichster Kommentar

aktualisieren! :raised_hands:

Die Lösung ist super einfach und ich habe sie von einem mocha-webpack Problem erhalten: https://github.com/zinserjan/mocha-webpack/issues/6#issuecomment -213957809. Außerdem gibt es dieses Dokument https://github.com/zinserjan/mocha-webpack/blob/master/docs/installation/webpack-configuration.md , das die Verwendung dieses Plugins empfiehlt.

const nodeExternals = require('webpack-node-externals');

module.exports = {
  externals: [nodeExternals()],
  // etc configs here
}

Alle 5 Kommentare

Nein, Webpack wird nicht unterstützt.

@domenic Warum wird Webpack nicht unterstützt? Es ist mit Abstand der beliebteste Bundler.

Weil es keine Codemuster verarbeiten kann, die jsdom verwendet.

@domenic was für

Ich verwende bereits jsdom mit webpack, und die von mir verwendeten Dokument-/Dom-Methoden funktionieren zumindest gut. Ich bin gerade aufgrund der obigen Warnung zu diesem Problem gekommen. Ich habe es erst jetzt bemerkt, weil ich denke, dass mocha-webpack die Warnung unterdrückt hat, und ich habe es bemerkt, nachdem ich sie weggeworfen hatte. Es könnte jedoch sein, dass Mokka-Webpack nichts unterdrückt und etwas Schlaues tut, um damit umzugehen, und wir könnten diese Best Practice verwenden.

aktualisieren! :raised_hands:

Die Lösung ist super einfach und ich habe sie von einem mocha-webpack Problem erhalten: https://github.com/zinserjan/mocha-webpack/issues/6#issuecomment -213957809. Außerdem gibt es dieses Dokument https://github.com/zinserjan/mocha-webpack/blob/master/docs/installation/webpack-configuration.md , das die Verwendung dieses Plugins empfiehlt.

const nodeExternals = require('webpack-node-externals');

module.exports = {
  externals: [nodeExternals()],
  // etc configs here
}
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen