Як отримати доступ до webpack-dev-сервера з пристроїв у локальній мережі?


112

Існує конфігурація сервера розробки веб-пакетів (це частина всієї конфігурації):

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);
  };
}

Я виконую веб-пакет за допомогою наступної команди:

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

Я можу отримати доступ до сервера розробників за допомогою http://localhost:8080своєї локальної машини, але я також хочу отримати доступ до свого сервера через мобільний планшетний ПК (вони знаходяться в тій же мережі Wi-Fi).

Як я можу це ввімкнути? Дякую!


Схоже, це вже повинно працювати, враховуючи, що хост встановлений на 0,0.0,0.
Фелікс Клінг

@FelixKling, але яку IP-адресу я повинен використовувати для цього в Safari свого iPhone?
malcoauri

IP машини, на якій працює сервер.
Фелікс Клінг

2
Я міг тільки змусити його працювати з webpack-dev-server --host=0.0.0.0 --disable-host-check --useLocalIpдив. Github.com/webpack/webpack-dev-server/isissue/882
Nickofthyme

Відповіді:


199

(Якщо ви перебуваєте на Mac та таких мережах, як у мене.)

Запустіть webpack-dev-сервер за допомогою --host 0.0.0.0- це дозволяє серверу прослуховувати запити з мережі, а не лише localhost.

Знайдіть адресу комп’ютера в мережі. У терміналі введіть ifconfigі шукайте en1розділ чи розділ із чимось подібнимinet 192.168.1.111

На своєму мобільному пристрої в тій самій мережі завітайте http://192.168.1.111:8080та насолоджуйтесь гарячим завантаженням блаженства розробки.


4
Для мене це теж працює, але я отримую порожню сторінку. Під час перегляду вкладок я можу прокручувати та мати назву сайту. Ви, можливо, маєте ідею, як це виправити?
moesphemie

2
Також працює на Ubuntu 17.10. Якщо ifconfigне встановлено, IP-адресу можна знайти черезip addr show
TitanFighter

1
Щоб запустити сервер розробників --host 0.0.0.0, чи варто все-таки оновити якийсь конфігураційний файл чи я можу просто запустити npm run dev --host 0.0.0.0? Тому що в даний час, коли я запускаю команду, не змінюючи нічого, вона видає помилку. Якщо нам доведеться оновити якийсь конфігураційний файл, чи можете ви повідомити нам ім’я / каталог файлу?
PrintlnParams

npm run dev --host 0.0.0.0 видає помилку, яка вказує, що програма шукає "0.0.0.0" як ім'я модуля. Коли я змінив значення у файлі index.js свого проекту на "0.0.0.0" від "localhost", то воно спрацювало.
Зал Василя

1
все ще працює в грудні 18 року для мене. FYI, а не шукати IP-адресу в терміналі, я роблю наступне: cmd + [space]> Network Utility, моя IP-адреса є другим пунктом внизу. Це, здається, працює кожен раз, коли я його спробую.
Джаред

90

Ви можете встановити ip-адресу безпосередньо у конфігураційному файлі webpack:

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

1
Це працювало для мене, значення 0,0.0,0 яке працювало.
Зал Василя

2
У Windows він працював для мене з wifi, про який я написав хостуipconfig > IPv4 Address
URL87

1
Це, безумовно, найкраще, смію сказати, лише відповідь. Чому його не позначили як такого ?!
Камаль

Якщо ви також хочете використовувати open: trueпрапор, тоді ви також можете встановити, openPage: 'http://localhost:8080'і ваш браузер належним чином запуститься знову, замість того, щоб намагатися автоматично завантажувати 0,0.0.0:8080 і не вдаватись.
Марк

Це працює, але пам’ятайте, що прив’язує 0,0.0.0 у публічних місцях, де хтось інший може підключитися до вашого пристрою. Це може призвести до крадіжки ваших даних. Можливо, вам знадобиться брандмауер для сервера розробників, як цей: github.com/funbox/webpack-dev-server-firewall
Ігор Адаменко

16

Це може бути не ідеальним рішенням, але я думаю, ви можете використовувати для цього ngrok . Ngrok може допомогти вам відкрити локальний веб-сервер в Інтернеті. Ви можете вказати ngrok на локальному сервері розробників, а потім налаштувати додаток для використання URL-адреси ngrok.

Наприклад, припустимо, ваш сервер працює на порту 8080 . Ви можете використовувати ngrok, щоб викрити це зовнішнім світом за допомогою бігу

./ngrok http 8080

ngrok тут

Хороша річ у ngrokтому, що вона надає більш безпечну https- версію відкритого URL-адреси, яку ви надаєте будь-якій іншій людині світу, щоб перевірити або показати свою роботу.

Крім того, в цій команді є безліч налаштувань, таких як встановити зручне ім'я хоста замість випадкової рядки в відкритому URL-адресі та багато іншого.

Якщо ви просто хочете відкрити свій веб-сайт, щоб перевірити чутливість мобільних пристроїв, вам слід перейти до browersync .


8

Для мене, що допомогло врешті-решт, було додати це до конфігурації webpack-dev-сервера:

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

а потім також зміна файлу web-pack.config.js babel:

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

Тепер просто знайдіть ім’я хоста свого комп'ютера ( hostnameна терміналі OSX), додайте визначений вами порт, і ви зможете продовжувати мобільний телефон.

Порівняно з ngrok.io, це рішення також дозволить вам використовувати модуль гарячої перезавантаження реакції на мобільний телефон.


7

Я не міг прокоментувати, щоб додати додаткову інформацію до відповіді forresto, але тут у майбутньому (2019 р.) Вам потрібно буде додати --publicпрапор через вразливість безпеки із --host 0.0.0.0функцією поодинці. Перегляньте цей коментар для отримання більш детальної інформації.

Щоб уникнути "відповіді на інші відповіді" як відповіді, ось рада forresto плюс додаткові деталі, які вам знадобляться для цього:

Додати обидва:

--host 0.0.0.0

і

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

де ваш хост - ім'я хоста (для мене це (ім'я) s-macbook-pro.local)), а порт - це той порт, до якого ви намагаєтесь отримати доступ (знову ж таки, для мене це 8081).

Отже, ось як виглядає мій package.json:

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

На жаль, це не спрацювало для мене. Я в Windows 10 і просто не можу отримати доступ до свого мобільного веб-сайту за допомогою мобільного телефону. Мобільний браузер просто видає мені помилку очікування. Коли я запускаю веб-додаток на тому ж ноутбуку Windows 10, але обслуговую його через tomcat, я можу отримати доступ до цього локального веб-додатка, набравши ip адресу свого ноутбука Windows, а потім номер порту. Я дійсно не знаю, чому це можливо, але я не можу відкрити локальний веб-сервер, який працює на розробнику веб-пакетів. Хтось має ідеї щодо того, що б я ще не міг спробувати зробити свій локальний доступ до веб-сайту для свого мобільного телефону?
ampersand83
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.