Как получить доступ к webpack-dev-серверу с устройств в локальной сети?


116

Есть некоторая конфигурация сервера webpack dev (это часть всей конфигурации):

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

Я выполняю webpack с помощью следующей команды:

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?
Малкоаури

IP-адрес машины, на которой работает сервер.
Феликс Клинг,

2
Я мог только получить его на работу с webpack-dev-server --host=0.0.0.0 --disable-host-check --useLocalIpSEE github.com/webpack/webpack-dev-server/issues/882
Nickofthyme

Ответы:


203

(Если у вас Mac и сеть такая же, как у меня.)

Запустите webpack-dev-server с --host 0.0.0.0- это позволяет серверу прослушивать запросы из сети, а не только из localhost.

Найдите адрес своего компьютера в сети. В терминале введите ifconfigи найдите en1раздел или тот, в котором есть что-то вродеinet 192.168.1.111

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


4
Для меня это тоже работает, но у меня пустая страница. Я могу прокручивать и видеть заголовок сайта, когда просматриваю вкладки. Вы, может быть, знаете, как это исправить?
moesphemie 07

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 года для меня. К вашему сведению, вместо того, чтобы искать IP-адрес в терминале, я делаю следующее: cmd + [пробел]> Сетевая утилита, мой IP-адрес - второй элемент вниз. Кажется, это работает каждый раз, когда я пробую.
Джаред

92

Вы можете установить свой IP-адрес прямо в конфигурационном файле webpack:

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

1
Это сработало для меня, значение 0.0.0.0, которое сработало.
Василий Холл

2
В Windows это сработало для меня с Wi-Fi, в котором я написал хост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-server:

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

а затем также изменив файл webpack.config.js babel:

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

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

По сравнению с ngrok.io это решение также позволит вам использовать модуль горячей перезагрузки react на мобильных устройствах.


7

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

Чтобы избежать «ответа на другие ответы» в качестве ответа, вот совет forresto плюс дополнительные сведения, которые вам понадобятся для выполнения этой работы:

Добавьте оба:

--host 0.0.0.0

и

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

где your-host - это имя хоста (для меня это (name) s-macbook-pro.local)), а port - это любой порт, к которому вы пытаетесь получить доступ (опять же, для меня это 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.