Come accedere a webpack-dev-server dai dispositivi nella rete locale?


112

C'è un po 'di configurazione del server webpack dev (fa parte dell'intera configurazione):

config.devServer = {
  contentBase: './' + (options.publicFolder ? options.publicFolder : 'public'),
  stats: {
    modules: false,
    cached: false,
    colors: true,
    chunk: false
  },
  proxy: [{
    path: /^\/api\/(.*)/,
    target: options.proxyApiTarget,
    rewrite: rewriteUrl('/$1'),
    changeOrigin: true
  }]
};

function rewriteUrl(replacePath) {
  return function (req, opt) {  // gets called with request and proxy object
    var queryIndex = req.url.indexOf('?');
    var query = queryIndex >= 0 ? req.url.substr(queryIndex) : "";
    req.url = req.path.replace(opt.path, replacePath) + query;
    console.log("rewriting ", req.originalUrl, req.url);
  };
}

Eseguo webpack con il seguente comando:

node node_modules/webpack-dev-server/bin/webpack-dev-server.js --host 0.0.0.0 --history-api-fallback --debug --inline --progress --config config/webpack.app.dev.js

Posso accedere al server di sviluppo utilizzando http://localhost:8080sulla mia macchina locale, ma voglio anche accedere al mio server dal mio cellulare, tablet (sono nella stessa rete Wi-Fi).

Come posso abilitarlo? Grazie!


Sembra che dovrebbe già funzionare, dato che l'host è impostato su 0.0.0.0.
Felix Kling

@FelixKling ma quale indirizzo IP dovrei usare in Safari del mio iPhone per questo?
malcoauri

L'IP della macchina su cui viene eseguito il server.
Felix Kling

2
Ho potuto solo farlo funzionare con webpack-dev-server --host=0.0.0.0 --disable-host-check --useLocalIpsede github.com/webpack/webpack-dev-server/issues/882
Nickofthyme

Risposte:


199

(Se sei su un Mac e una rete come la mia.)

Esegui webpack-dev-server con --host 0.0.0.0: questo consente al server di ascoltare le richieste dalla rete, non solo dall'host locale.

Trova l'indirizzo del tuo computer sulla rete. Nel terminale, digita ifconfige cerca la en1sezione o quella con qualcosa di simileinet 192.168.1.111

Nel tuo dispositivo mobile sulla stessa rete, visita http://192.168.1.111:8080e goditi la calda felicità degli sviluppatori.


4
Anche per me funziona, ma ricevo una pagina vuota. Posso scorrere e avere un titolo del sito quando sfoglio le schede. Hai forse un'idea di come risolvere questo problema?
Moesphemie

2
Funziona anche su Ubuntu 17.10. Se ifconfignon è installato, l'indirizzo IP può essere trovato tramiteip addr show
TitanFighter

1
Per eseguire il server di sviluppo con --host 0.0.0.0, dovremmo comunque aggiornare alcuni file di configurazione o posso semplicemente eseguire npm run dev --host 0.0.0.0? Perché attualmente quando eseguo il comando senza modificare nulla viene generato un errore. Se dobbiamo aggiornare qualche file di configurazione, potresti per favore comunicarci il nome del file / directory?
PrintlnParams

npm run dev --host 0.0.0.0 genera l'errore che indica che il programma sta cercando "0.0.0.0" come nome del modulo. Quando ho modificato il valore all'interno del file index.js del mio progetto in "0.0.0.0" da "localhost", ha funzionato.
Sala Vasily,

1
ancora lavorando nel dicembre '18 per me. Cordiali saluti, piuttosto che cercare l'indirizzo IP nel terminale, faccio quanto segue: cmd + [spazio]> Utilità di rete, il mio indirizzo IP è il secondo elemento in basso. Sembra funzionare ogni volta che lo provo.
jared

90

Puoi impostare il tuo indirizzo IP direttamente nel file di configurazione del webpack:

devServer: {
    host: '0.0.0.0',//your ip address
    port: 8080,
    disableHostCheck: true,
    ...
}

1
Questo ha funzionato per me, il valore è 0.0.0.0 che ha funzionato.
Vasily Hall

2
Su Windows ha funzionato per me con il Wiipconfig > IPv4 Address
Fi

1
Questa è di gran lunga la migliore, oserei dire, l'unica risposta. Perché non è stato contrassegnato come tale ?!
Kamal

Se desideri utilizzare anche il open: trueflag, puoi anche impostarlo openPage: 'http://localhost:8080'e il tuo browser verrà riavviato correttamente, invece di provare a caricare automaticamente 0.0.0.0:8080 e fallire.
Contrassegna il

Funziona, ma ricorda di associare 0.0.0.0 in luoghi pubblici in cui qualcun altro potrebbe connettersi al tuo dispositivo. Potrebbe portare al furto dei tuoi dati. Potrebbe essere necessario un firewall per il server di sviluppo, come questo: github.com/funbox/webpack-dev-server-firewall
Igor Adamenko

16

Potrebbe non essere la soluzione perfetta, ma penso che tu possa usare ngrok per questo. Ngrok può aiutarti a esporre un server web locale a Internet. Puoi puntare ngrok al tuo server di sviluppo locale e quindi configurare la tua app per utilizzare l'URL di ngrok.

Ad esempio, supponiamo che il tuo server sia in esecuzione sulla porta 8080 . Puoi usare ngrok per esporlo al mondo esterno tramite la corsa

./ngrok http 8080

ngrok output qui

La cosa buona ngrokè che fornisce una versione https più sicura dell'URL esposto che fornisci a qualsiasi altra persona nel mondo per testare o mostrare il tuo lavoro.

Inoltre ha molte personalizzazioni disponibili nel comando come impostare un nome host user friendly invece di una stringa casuale nell'URL esposto e molte altre cose.

Se vuoi solo aprire il tuo sito web per controllare la reattività mobile, dovresti usare browersync .


8

Per me, ciò che ha aiutato alla fine è stato aggiungere questo alla configurazione di webpack-dev-server:

new webpackDev(webpack(config), {
    public: require('os').hostname().toLowerCase() + ':3000'
    ...
})

e poi cambiando anche il file webpack.config.js di babel:

module.exports = {
    entry: [
        'webpack-dev-server/client?http://' + require('os').hostname().toLowerCase() + ':3000',
        ...
    ]
    ...
}

Ora prendi il nome host del tuo computer ( hostnamesul terminale di OSX), aggiungi la porta che hai definito e sei a posto per andare sul cellulare.

Rispetto a ngrok.io, questa soluzione ti consentirà anche di utilizzare il modulo di ricarica a caldo di react su dispositivi mobili.


7

Non ho potuto commentare per aggiungere ulteriori informazioni alla risposta di forresto, ma qui in futuro (2019) dovrai aggiungere un --publicflag a causa di una vulnerabilità di sicurezza con --host 0.0.0.0solo. Dai un'occhiata a questo commento per maggiori dettagli.

Per evitare di "rispondere ad altre risposte" come risposta, ecco il consiglio di forresto più i dettagli aggiuntivi necessari per far funzionare questo:

Aggiungi entrambi:

--host 0.0.0.0

e

--public <your-host>:<port>

dove tuo-host è il nome host (per me è (nome) s-macbook-pro.local)) e la porta è qualunque porta a cui stai tentando di accedere (di nuovo, per me è 8081).

Quindi ecco come appare il mio package.json:

  "scripts": {
    ...
    "start:webpack": "node_modules/.bin/webpack-dev-server --host 0.0.0.0 --public <name>s-macbook-pro.local:8081",
    ...
  },


Purtroppo non ha funzionato per me. Sono su Windows 10 e non riesco ad accedere alla mia webapp di sviluppo con il mio cellulare. Il browser mobile mi dà solo un errore di timeout. Quando avvio un'app Web sullo stesso laptop Windows 10, ma la servo tramite un tomcat, sono in grado di accedere all'app Web locale digitando l'indirizzo IP del mio laptop Windows seguito dal numero di porta. Non so davvero perché sia ​​possibile, ma non riesco ad aprire una webapp locale in esecuzione su un server di sviluppo webpack. Qualcuno ha qualche idea su cos'altro potrei provare per rendere l'accesso alla mia webapp locale per il mio cellulare?
commerciale83
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.