Wie kann ich die require() aus der Konsole mit webpack?
Wie kann ich die require () - /import-Module von der Konsole aus? Zum Beispiel, sagen, ich habe installiert die ImmutableJS npm, ich möchte in der Lage sein die Funktionen aus dem Modul, während ich arbeiten bin in der Konsole.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine weitere Allgemeine Möglichkeit, dies zu tun.
Erfordern eine Modul-ID
Die aktuelle version von WebPack macht
webpackJsonp(...)
, die verwendet werden können, erfordern eine Modul-ID:oder in Typoskript
Die ID ist sichtbar an der Oberseite des Moduls in die mitgelieferte Datei oder in der Fußzeile des original-Quell-Datei bedient-via-Quellen-Karten.
Erfordern ein Modul mit Namen
Erfordern ein Modul mit Namen ist viel schwieriger, als WebPack scheint nicht zu halten, jeglicher Bezug zu den Modul-Pfad, sobald es verarbeitet alle Quellen. Aber der folgende code scheint um den trick zu tun, die in vielen Fällen:
Dies ist eine schnelle erste Schuss auf diese, so es ist alles für die Verbesserung!
const id = 0;
. Wenn ich den code oben (und einige andere strings/zahlen), die Versprechen, nie gelöst.window.webpackJsonp is not a function
🙁 Was sollte ich verlangen?webpackJsonp()
definiert und was sind Ihre Argumente? Kann nicht finden überall in der webpack-Quellcode.Einschließlich dieses in einem Modul erlauben
require([modules], function)
einen browserBeispiel:
Hinweis: Jede switch-Anweisung option sollte entweder etwas sein, das dieses Modul schon verlangt, oder sofern der von ProvidePlugin
Quellen:
Basierend auf diese Antwort, die verwendet werden können, um einen gesamten Ordner hinzuzufügen.
Alternative Methode aus Webpack Docs - das ermöglicht so etwas wie
require.yourModule.function()
require
etwas in der top-level-Kontext mit dieser Methode?Nutzen zu können
require
Module in der Konsole ist sehr praktisch für das debugging und code Analyse. @psimyn's Antwort ist sehr spezifisch, so dass Sie wahrscheinlich nicht halten, die Funktion mit allen Modulen, die Sie benötigen.Wenn ich eines meiner eigenen Module für diesen Zweck, vergebe ich eine window-Eigenschaft auf, so dass ich jederzeit darauf zugreifen können.. e g
window.mymodule = whatever_im_exporting;
. Ich verwende den gleichen trick zu entlarven ein system-Modul, wenn ich will, mit ihm zu spielen.e.g:myservice.js:
Ist es immer noch ein bisschen Schmerzen, aber das Graben in den bundles, ich sehe keinen Weg, um bequem Karten über Module.
// TODO: remove this
. Einer der Gründe, warum ich lieber Lader zu packagers ist, dass man Experimentieren kann, wie dies ohne code ändern, nur mit einem browser-Konsole.SystemJS.import('lodash').then(({default}) => window._ = default);
. Ich weiß, diese Frage ist über das Webpack, ich bin nur zu schimpfen, und Sie müssen zugeben, das ist ziemlich nett.devdependencies
, abgesehen von debugging-utils, sind meistens Werkzeuge, die nicht in jedem bundle. Wenn Sie vorschlagen, die bestimmte Abhängigkeiten als globals in der Entwicklung von bundles, sondern als Module in der Produktion-bundles, das klingt ziemlich gefährlich. Eine unglückliche Reihe von impliziten globalen Abhängigkeiten zwischen client-side-Pakete.if (process.env.NODE_ENV !== 'production'){...}
zur Vermeidung potentieller Schwierigkeiten bei der Bereitstellung.define
,require
/exports
)Fand ich einen Weg, der funktioniert, für beide WebPack 1 und 2. (solange die Quelle nicht-minified)
Repo: https://github.com/Venryx/webpack-runtime-require
Installieren
Nutzung
Ersten, benötigen die module mindestens einmal.
Wird es dann hinzufügen von Require () - Funktion auf das window-Objekt für die Verwendung in der Konsole oder überall in Ihrem code.
Dann einfach verwenden, etwa so:
Es ist nicht sehr hübsch (es verwendet regexes zu suchen, das Modul wrapper-Funktionen) oder schnell (dauert ~50ms der erste Anruf, und ~0ms nach), aber beide sind völlig in Ordnung, wenn es nur für die hack-Tests in der Konsole.
Technik
Die unten ist eine beschnittene version der Quelle zu zeigen, wie es funktioniert. (siehe die repo für die vollständige/aktuelle)
Könnte man etwas ähnliches machen wie psimyn beraten
hinzufügen folgenden code, um einige Modul im bundle:
Verwenden, erfordern von der Konsole:
Sehen Sie mehr
expose-loader ist meiner Meinung nach eine elegantere Lösung:
Nach einer npm-Modul (siehe meine andere Antwort), habe ich eine Suche auf npms.io und scheint gefunden zu haben, ein bestehendes webpack-plugin für diesen Zweck zur Verfügung.
Repo: https://www.npmjs.com/package/webpack-expose-require-plugin
Installieren
Nutzung
Fügen Sie das plugin auf Ihrem webpack config ein, dann bei Laufzeit verwenden, etwa so:
Siehe Paket/repo readme-Seite für mehr info.
BEARBEITEN
Habe ich versucht, das plugin in mein eigenes Projekt, aber konnte es nicht zu funktionieren; ich habe immer den Fehler:
Cannot read property 'resource' of undefined
. Ich überlasse es hier für den Fall, es funktioniert für andere Menschen, obwohl. (Ich bin derzeit mit der Lösung oben erwähnt statt)Nachdem sowohl meine eigenen npm-Paket für diesen (siehe hier), sowie der Suche nach der ein bestehendes (siehe hier), ich fand auch einen Weg, um es in einer Zeile nur mit dem built-in-webpack-Funktionen.
Es nutzt WebPack "Kontexte": https://webpack.github.io/docs/context.html
Nur die folgende Zeile hinzufügen, um eine Datei direkt im "Source" Ordner:
Nun können Sie es verwenden, (zB. in der Konsole) so:
Jedoch ein wichtiger Nachteil dieses Ansatzes, im Vergleich zu den beiden Lösungen oben erwähnt, ist, dass es scheint nicht zu funktionieren für Dateien in den node_modules-Ordner. Wenn der Pfad angepasst werden, um "../", webpack nicht kompiliert werden kann-zumindest in meinem Projekt. (vielleicht, weil das node_modules-Ordner ist nur so Massiv)
Hinzufügen von den folgenden code, um eines Ihrer Module ermöglichen Ihnen die Module zu laden, die von id.
In der Konsole verwenden Sie die folgenden: