TGViewer
Channel Public Channel
Околодев

Околодев

@okolodev

Связь: @robox
Subscribers
208
Photos
4
Videos
0
Links
26

Showing posts older than #35 · Back to latest

Older Posts 18 shown
Post #34 838
Версия приложения на клиенте

Небольшой трюк, как вживить в приложение информацию о дате его сборке. Использую, чтобы убедиться, что запустилась правильная версия приложения на фронтенде.

// package.json
{
"scripts": {
"build": "REACT_APP_VERSION=`date +%m.%d.%H%M` yarn run build"
}
}


// index.js
console.log('APP VERSION: ', process.env.REACT_APP_VERSION);

Результат:
APP VERSION: 11.01.1200
(месяц.день.часыминуты)
Post #33 931
Запуск сниппетов кода

Регулярно возникает нужда быстренько запустить какой-нибудь кусочек кода. И я всё никак не мог найти удобный способ делать это. В браузерных песочницах долго. В каком-нибудь ipython редактировать многострочный сниппет — боль. Ещё было непросто заранее организовать импорт частоиспользуемых пакетов: math, itertools, functools, lodash.js.

Идеальное решение лежало на поверхности. В jetbrains IDE можно создавать scratch-файлы — черновики. Они доступны из любого проекта. Я создаю такой файл, сразу даю ему какое-нибудь запоминаемое имя, сразу импортирую то, что может пригодиться в сниппетах. Затем в любой момент, в любом проекте я поиском нахожу его, накидываю какой-нибудь код и запускаю. Здесь же сразу и дебаггер доступен, не говоря уже о подсветке, автокомплите, знакомых хоткеях и прочих ништяках.


Юбилейный 16-й пост на канале 🎉
Post #32 785
Тест

Те, кто еще не пишут unit-тесты, зачастую думают, что эта такая штука, которая вроде бы и полезна в целом, но при этом требует несколько больше времени в процессе разработки, нежели без них. И что в долгосрочной перспективе это бы облегчило поддержку, но прямо сейчас на это времени нет.

Это всё буллщит! Unit-тесты не замедляют процесс разработки, а ускоряют его!

Приведу пример. Пользователь должен ввести в форму на сайте три известных ему параметра треугольника: углы или длины сторон в любых комбинациях. Ему в ответ должно вывести остальные вычисленные углы и стороны.

Мы пишем функцию с вычислениями, пишем вьюху, что ее вызывает, рендерим ответ. Запускаем браузер, переходим по ссылке, заполняем ручками все длины треугольника, отправляем на сервер, проверяем ответ, который пришел, — не совпало. Правим код, снова заполняем форму, снова проверяем. Опять не сходится. Опять повторяем, каждый раз заполняя форму собственноручно.

Как это могло бы быть с тестами. Пишем функцию с вычислениями, пишем тест к ней (или даже в обратной последовательности — не важно). Вместо постоянного заполнения формы мы единожды указываем данные на входе функции и ожидаемый вывод. Пишем код, прогоняем тест, повторяем, пока результат не совпадет с ожидаемым. Процесс разработки уже ускорился за счет отсутствия необходимости заполнять форму.

«Ой, да ладно, мне нетрудно ручками форму заполнить», — скажет упертый борец с тестами.

Хорошо, теперь нам нужно отладить кейс с углами треугольника на входе вместо сторон. Дополняем функцию, отлаживаем ее, опять каждый раз возвращаясь к заполнению формы в браузере. Вроде бы все ок. Но случайно выясняется, что мы тем самым сломали уже работающий первый кейс. Окей. Снова правим. Проверяем уже попеременно оба кейса.

Что у нас в варианте с тестами? Просто пишем еще один тест и отлаживаем код. Сломали первый кейс — упавший первый тест сразу даст об этом знать.

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

Пишите тесты. Это удобнее и быстрее. Я зачастую отмечаю, что мог весь день проработать, даже не запустив свой веб-сервер.

Вдогонку порекомендую пакеты для питона:
factoryboy — многократно облегчает процесс наполнения тестовой базы тестовыми инстансами моделей, заменяет необходимость писать фикстуры.
faker — придумывает фейковые имена, номера телефонов, адреса компаний, почтовые ящики и прочие тестовые данные.
  • 👍 1
Post #31 1.41K
JS: опциональные ключи объектов и элементы массивов

Зачастую есть нужда добавлять ключи в объект в зависимости от условия. Вместо того, чтобы делать это императивно
if (condition) { fooObj[key3] = 'value3' },
можно задекларировать это прямо в object literal.

const fooObj = {
key1: 'value1',
key2: 'value2',
...(condition && { key3: 'value3' }),
}


Это работает за счёт спред-оператора и той особенности, что в объекте можно спредить хоть false, хоть null, хоть undefined и это просто ни к чему не приведёт.

С массивом так не получится. В массиве нужно спредить пустой массив при несрабатывании условия.

const fooArr = [
1,
2,
...(condition ? [3] : []),
]
  • 👍 1
Post #30 1.51K
Про CORS

Попытаюсь упрощённо объяснить, что такое CORS, зачем он нужен и как с ним бороться. Если интересно только последнее, можно сразу листать вниз.

Возьмём для примера какой-нибудь проект типа Instagram. У него есть мобильные приложения, а значит, есть API. Скорее всего приватное. И тут появляется условный разработчик Вася. Декомпилит и реверсит приложение, достаёт все нужные эндпоинты и ключи. И думает: «а дай-ка я сделаю свой веб-клиент к инстаграмму, добавлю туда нескучных стикеров, навешаю свою рекламу и дам имя Plesnigram».

Пользователь открывает Васин веб-клиент по адресу plesnigram.com, веб-клиент шлёт запросы на api.instagram.com. Можно гребсти бабло лопатой, паразитируя на чужой инфраструктуре. А инстаграм сидит и локти на ногах кусает — никак Васин клиент не заблокируешь же. У его пользователей айпишники-то разные. А больше никакой инфы и нет в request.

И всё классно было бы у Васи в мире без CORS. Но в нашем мире первый же запрос к API выплюнет такую ошибку в консоль браузера:

 Access to fetch at 'https://api.instagram.com/feed/' from origin 'http://plesnigram.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

CORS это тот механизм защиты, который не даёт Васям писать подобные клиенты без разрешения инстаграмма.
Бегло пробежавшись по тексту ошибки первой мыслью может быть: «установлю-ка я mode: 'no-cors' да отключу его».
Но грош цена была бы такому механизму защиты тогда. no-cors для других случаев, не ваших.

Надо разобраться, что происходит.
Браузер смотрит, что открыта страница https://plesnigram.com, а запрос идёт на https://api.instagram.com. Несовпадение. Безо всяких премудростей можно запросы слать только на тот же самый origin. То есть на https://plesnigram.com/. А при несовпадении браузер сперва отошлёт pre-flight request — запрос на разведку. И принудительно выставит заголовок запроса Origin: https://plesnigram.com. Это те самые странные запросы с методом OPTIONS, которые иногда можно наблюдать во вкладке Network.

Сервер инстаграмма, в свою очередь, может решить. Если разрешает этот запрос с этого источника, то он должен вернуть в ответе заголовок Access-Control-Allow-Origin: https://plesnigram.com. Браузер сопоставляет значение этого заголовка с origin, который отправлялся ранее. И только в случае полного совпадения (включая порт, кстати) дальше на сервер отправляется запрос, который изначально задумывался. В противном случае имеем ту самую ошибку.

Как бороться
1. Можно поставить в хром расширение Allow-Access-Allow-Origin: *. Оно подменяет значение вышеупомянутого заголовка на * (любой origin). Это поможет при разработке. Не поможет, если захотите проверить с мобилки. Не поможет в проде.
2. Можно, собственно, сконфигурировать сервер, чтобы он возвращал нужный заголовок. Для разработки можно обойтись *. В проде проследите, чтобы там были только origins из белого списка.
3. Можно проксировать запросы так, чтобы origin оставался тем же самым. https://plesnigram.com/api/photos → https://api.instagram.com/photos. В проде это делается каким-нибудь nginx. Но, соответственно, у инстаграмма появится возможность с лёгкостью заблокировать ваш реверс-прокси, если ему что-то не понравится. В разработке это делается, например, с помощью http-proxy-middleware. Изучите доку своего вебпака. Прокси там уже, вероятно, встроено. Не забудьте переписать урлы эндпоинтов на относительные.

Со схожей проблемой столкнётесь, кстати, когда попытаетесь читать кастомные заголовки в ответах. Но с этим теперь можно разобраться и самим.
  • 👍 2
Post #29 934
Как в Казахстане вывести деньги с upwork и заплатить налоги

Статья будет полезна в первую очередь тем, кто работает через upwork. Но так же будет полезна и просто удаленным работникам, которые получают деньги не из Казахстана. В интернете вообще нет никакой информации по этой теме. В налоговом комитете вам так же ничего не посоветуют. Мне повезло найти пару людей, которые имели схожий опыт, и порасспрашивать их. Я поработал почти год, заплатил налоги за два периода, накопил свой опыт. Им и хочу поделиться.

Далее
Post #28 1.21K
​​JS switch expression

Хочу поделиться одним паттерном в JS. Альтернатива switch и вложенным тернарным операторам.

{
[true]: 'default value',
[someValue === 31337]: 'value 1',
[someCondition]: 'value 2',
[anotherCondition]: 'value 3',
}.true
Происходит здесь следующее. Мы объявляем объект и сразу же обращаемся к его ключу true. Внутри объекта вычисляемые ключи, которые вычисляются в true или false. Самый первый ключ — значение по умолчанию. Каждый следующий ключ, вычисляясь в true, затирает предыдущий. Последний ключ, который вычислился в true, и будет значением всего выражения.

Я называю этот паттерн switch expression, хотя его противники называют его pomoika.

👍 Это выражение (expression).
👍 Нет нужды городить вложенные тернарные операторы.
👍 Нет нужды даже объявлять какие-то функции. Всё работает прямо на месте.
👎 Не самый очевидный на первый взгляд код и, как следствие, вас могут побить.

Особенно полезен этот паттерн в styled-components.
  • 👍 2
Post #27 803
iPad для веб-разработчика

Safari это новый IE

Если вы работаете с фронтендом, не важно, будь то вёрстка или логика, довольно быстро вы столкнётесь с жалобами, что в Safari на iOS что-то не работает. Не спешите брать в кредит айфон, который станет даунгрейдом после вашего телефона на андроиде. Присмотритесь лучше к iPad. Он стоит в три раза дешевле — что-то около 330 долларов. И скорее всего даже пригодится вам по хозяйству помимо рабочей деятельности. Лично я раньше не представлял, зачем мне нужен планшет. А теперь не представляю, как я раньше без него жил.

А теперь поговорим о всяких нюансах и хитростях при использовании iPad для веб-разработки.

1. В iOS нет браузеров кроме Safari. Да, в AppStore можно найти Chrome и другие приложения. Но они лишь мимикрируют под браузеры. На самом деле это WebView с WebKit и интерфейс к нему. Их даже нельзя назначить браузерами по умолчанию. В интернете можно даже встретить упоминания, что и Safari и все браузеры под iOS работают на одном и том же движке. Но вот тут и кроется нюанс — фактически WebKit внутри Safari и WebKit внутри WebView, хоть и похожи, но всё же имеют различия. В этом легко убедиться, открыв детектор возможностей браузера. В разработке стоит иметь в виду, что запускать чаще всего надо именно Safari.

2. Можно менять размер браузера, используя Split View в Safari или Split View самой iOS. Это разные функции с одинаковым названием.

3. iOS приложения, не адаптированные под iPad, выглядят просто отвратительно. Они представляют собой тупо экранчик, размером с телефон, занимающий всего треть площади планшета. Это может сыграть на руку. Устанавливаем неадаптированный браузер, например, Opera. И спокойно отлаживаем мобильную версию вашего сайта. Но не забываем про нюанс из первого пункта.

4. В некоторых случаях может пригодиться приложение WebView из AppStore. Позволяет загружать ссылку через разные WebView-компоненты: UIWebView, WKWebView, SafariVC

5. Если у вас нет мака, значит, у вас нет и десктопного Safari. Вы в жопе. Это единственный прямой способ открыть DevTools Safari на iOS. Альтернативой может стать установка на компе RemoteDebug iOS WebKit Adapter. Мне удалось завезти его раза с десятого. Стабильности не хватает, удобства тоже.
Другой вариант — установить MIHTool на сам планшет. Инструмент даже поражает своими возможностями. Хотя удобства в этом тоже маловато, всё же лучше, чем ничего. Какой-никакой доступ к консоли и базовый element inspector.

6. Вкладку из сафари нельзя просто открыть в хроме. Исправить это недоразумение можно через Shortcut Open in Chrome. Тот ещё костыль, но лучше, чем копировать-вставлять ссылку.

7. Транслировать экран планшета на компьютер можно через LonelyScreen (бесплатно) или Reflector 3 (платно)
  • 👍 1
Post #26 702
Рыба

Сегодня скорее забавное, чем серьёзное.

Если вы в качестве «рыбы» всё ещё используете надоевший всем Lorem ipsum, то задумайтесь об альтернативах.

Яндекс.Рефераты генерируют качественный бред, который порой даже интересно прочесть.

Или, моё любимое, Samuel L. Ipsum. Цитаты Сэмюэла Л. Джексона из фильмов.


My money's in that office, right? If she start giving me some bullshit about it ain't there, and we got to go someplace else and get it, I'm gonna shoot you in the head then and there. Then I'm gonna shoot that bitch in the kneecaps, find out where my goddamn money is. She gonna tell me too. Hey, look at me when I'm talking to you, motherfucker. You listen: we go in there, and that nigga Winston or anybody else is in there, you the first motherfucker to get shot. You understand?
Post #25 831
Что такое виртуальные десктопы и как их готовить

Абзац про виртуальные десктопы в прошлом посте породил небольшую дискуссию и несколько вопросов.

Что это такое. Виртуальный десктоп — это Task View в Windows, Spaces в Mac OS, Workspaces в Linux (Gnome). Виртуальный десктоп — это не виртуализация рабочих столов (VDI) и это не подключение к удаленным рабочим столам (RDP)

Пока одни люди не понимают, зачем они нужны, другие не понимают, как без них жить. Объясню на своём примере. У меня создано девять виртуальных десктопов. У каждого есть определённая тематика. Не всегда весь перечисленный софт запущен. Но если запущен, то он всегда отправляется на определённый десктоп (вручную, к сожалению).

1. Браузер для серфинга, документация, почта: Chrome, Edge, Mail
2. Среда разработки: PyCharm, Arduino
3. Другой софт для разработки: Postman
4. Браузер для разработки: Canary, Chrome
5. Дизайн, макеты, фотки, графика, наброски: Photos, Krita, Inkscape, Pencil
6. Тайм трекер: Upwork
7. Мессенджеры: Telegram, Skype, Slack
8. Игры: Steam, Battle.net, сама игра
9. Резерв

Как выглядит мой рабочий процесс:
Я пишу код на виртуальном десктопе №2
Мне нужно посмотреть, что отрендерилось — я нажимаю Caps Lock + 4
Мне нужно свериться с макетом — я нажимаю Caps Lock + 5
Мне нужно вернуться в код — я нажимаю Caps Lock + 2
Мне нужна документация — я нажимаю Caps Lock + 1
Мне написали сообщение — я нажимаю Caps Lock + 7

За один хоткей я моментально добираюсь до нужного мне окна. Мне не нужно перебирать окошки через Alt + Tab. Мне не нужно перебирать десктопы через Ctrl + Win + ← / →.

Почему такой странный модификатор Caps Lock? Потому что по недоразумению на самом ценном месте клавиатуры располагается самая бесполезная функция. Ладно, почти самая.
Напомню, что такие хоткеи можно настроить через Windows 10 Virtual Desktop Enhancer, который, по сути, скрипт для Autohotkey.

Но зачем весь этот пердолинг, если в винде из коробки есть Win + 1..9?
Действительно, каждая кнопка на панели задач имеет свой хоткей в Win + 1..9 и можно просто закрепить нужные приложения за каждой кнопкой. Проблем с этим две:
1. В одном только примере почти 20 приложений. Этих хоткеев на всех не хватит, их всего девять.
2. Виртуальные десктопы сохраняют видимость, размеры и положения окошек. Если мне нужно, чтобы телеграм был справа, а скайп слева, то на седьмом десктопе всегда всё будет именно так. Независимо от того, по каким окошкам я прыгал.

Именно последнее и сподвигло меня начать пользоваться виртуальными десктопами.

Если у аудитории будет интерес, я напишу отдельный пост про Autohotkey, бесполезные кнопки на клавиатуре и способы сделать их полезными.
  • 👍 1
Post #24 632
Выживание под Windows

Так уж получилось, что я работаю под Windows. Вот такой вот камин-аут.

Есть люди, которые ничего новее WinXP не трогали и отказываются верить, что винда могла как-то измениться. Есть люди, которые под виндой работают, но не знают, что можно сделать какие-то процессы ещё удобнее. Попробую одним постом помочь и тем, и другим.

Нет нужды (ну почти) качать софт и ставить его, щёлкая по кнопке «Далее». Пакетный менеджер Chocolatey решает этот вопрос. Да, он, порой, уродлив внутри. Если покопаться во внутренностях пакета, можно встретить всякую дикость вплоть до эмуляции клавиатурных нажатий через autohotkey. Но снаружи он прекрасен, а главное — работает. Нужен графический редактор? choco install krita

В Win10 появился bash. Фича называется WSL (Windows Subsystem for Linux). Включается одной строчкой в powershell, а прямо из Windows Store скачивается и устанавливается нужный дистрибутив (я беру Ubuntu). С WSL есть нюансы. Например, работа с устройствами может быть затруднена. Однако мне, как веб-разработчику, вполне достаточно. С этим башем хорошо интегрируются IDE от JetBrains. Можно выкинуть putty и использовать обычный ssh. Да и весь остальный консольный софт, как правило, просто работает.

cmd.exe хоть и получил улучшения в Win10, всё ещё невозможно использовать в чистом виде. В качестве терминала я ставлю ConEmu. Выпрыгивает поверх всех окон в духе консоли из quake. Поддерживает любые шеллы, включая вышеупомянутый bash. Всё это быстро вызывается настраиваемыми хоткеями и раскидывается по разным вкладкам. Красота.

Docker, увы, без виртуалки не запустится. Даже под WSL. Однако официальная обёртка Docker for Windows даёт очень даже качественную абстракцию. И хотя она, как и любая другая абстракция, всё же протекает, опыт пользования докером будет почти на уровне нативного.

Вопреки распространённому заблуждению, виртуальные десктопы есть в винде ещё с WinXP, если не раньше. Но они были там в виде API. Для вызова этого API нужно было ставить сторонний софт. Начиная с Win10 оно есть из коробки. Фича называется Task View и имеет несколько хоткеев: Win + Tab, Ctrl + Win + ←, Ctrl + Win + →. Чего действительно не хватает, так это хоткеев для перехода к конкретному рабочему столу вместо перелистывания. Я этот вопрос решил, поставив Windows 10 Virtual Desktop Enhancer

Ну и бонусом, рекомендую ознакомиться со списком хоткеев винды. Там есть куча интересных, о которых вы, скорее всего, даже не догадывались. Например, скриншот прямоугольником (Win + Shift + S), лупа (Win + =, Win + -, Win + Esc), Windows Ink Workspace (Win + W), эмодзи-клавиатура 😸 (Win + .).
  • 👍 1
Post #23 629
​​Простой способ организации локальных настроек

Зачастую есть нужда иметь какие-то локальные настройки: данные подключения к локальной БД, включенный debug режим. Как правило, для этого создают файл типа settings.overrides.ext, импортируют из основных настроек, добавляют его в .gitignore. Но есть более гибкий и удобный, на мой взгляд, способ.

В версии 2018.1 во всех IDE от JetBrains появилась хорошая фича — частичные коммиты в git. То есть изменения для коммитов можно выбирать не просто пофайлово, а построчно. Как бонус — всё то же самое теперь относится и к Changelists. А значит, можно проделывать следующее:

1. Создаём Changelist с именем dev, например. Делать его активным не нужно.
2. Вносим в любые файлы изменения, специфичные для нашего локального окружения.
В примере ниже я переопределяю функцию, которая возвращает текущее время для отладки связанных с ним кейсов.
3. Переносим изменённые строчки в Changelist dev.

Готово. Можно работать даже над изменёнными файлами и не бояться, что изменения из dev случайно попадут в коммит. Их попросту не получится закоммитить.

Если вы сталкиваетесь с тем, что каждый член команды делает одни и те же изменения у себя локально, то всё же стоит вынести их в git.
Post #22 635
​​Импорт HTTP-запроса из Chrome в Postman

Postman сам по себе очень крутой инструмент для работы с HTTP-запросами. Но что делает его особенно крутым, там это возможность импорта запросов из Chrome. Процедура эта, хоть и простая, но не самая очевидная. Порою больно наблюдать, как разработчик ручками переносит запрос, старательно копируя все заголовки.

А нужно всего лишь:
1. Chrome DevTools → Network → ПКМ по запросу → Copy → Copy as cURL (bash)
2. Postman → Import
3. Past Raw Text → вставить то, что скопировали из хрома

Я в курсе про Postman Interceptor, который служит схожей цели. Проблема с ним в том, что он работает только в расширениях к браузерам, но не в самостоятельном приложении постмана.
Post #21 694
​​Мультикаретка и манипуляции со строками

Почти в любом редакторе есть такой инструмент как «мультикаретка» (multicarret, multicursor). И очень многие разработчики его либо игнорируют, либо и вовсе не знают о нём.

Для начала стоит посмотреть гифку. Объясняю, что там происходит.

• Ctrl, Ctrl + ↑ или Ctrl, Ctrl + ↓ (да, именно двойной Ctrl) создаёт дополнительную каретку вверх или вниз от текущей, соответственно
• Ctrl + W расширяет выделение по контексту. Просто попробуйте выделить переменную в функции и понажимать этот хоткей несколько раз.
• Alt + M (понадобится плагин String Manipulation). Меню манипуляций со строками. Их там много, вот парочка самых интересных.
• Последовательности (Increment / Decrement → Create sequence). Превращает 0, 0, 0, 0, 0 в 0, 1, 2, 3, 4, чем экономит немало времени при наборе.
• Смена регистра (Switch case). Да, я знаю, что из коробки есть Ctrl + Shift + U, но тут возможностей куда больше.

Не продемонстрировано на гифке, но так же полезно знать:
• Alt + J ищет выделенное и создает каретку на первом совпадении. Последующие нажатия создают дополнительные каретки на дальнейших совпадениях
• Ctrl + Alt + Shift + J создаёт каретки на всех совпадениях
• Alt + Shift + J удаляет последнюю каретку
Post #20 616
Как настроить панельки в IDE

Да никак. Вместо этого лучше их все отключить. За счёт этого вы получаете:
• Меньше визуального шума
• Больше свободного пространства редактора
• Стимул выучить наконец хоткеи, что должно положительно сказаться на продуктивности

С отключением панелек проблем возникнуть не должно. А вот главное меню придётся отключать плагином Main Menu toggler.

Как без всего этого жить. Выучить хоткей Ctrl+Shift+A (Find Action) и искать нужные действия в нём, подглядывая хоткеи. Также есть смысл поставить плагин Nyan Progress Bar
Key Promoter X, который будет давать подсказки по хоткеям в случае кликов по каким-то кнопкам.

Кстати, количество вкладок я принудительно ограничиваю десятью, дабы они не скапливались. То же самое и для вкладок в хроме (20) и канарейке (4)
Post #15 653
Туннелирование локального порта наружу через serveo

Иногда нужно выставить какой-нибудь порт на своей машине в интернет. В этом поможет serveo.net.

Для чего это бывает нужно мне:
• Продемонстрировать заказчику проект, не заморачиваясь с его деплоем.
• Посмотреть, как проект выглядит на мобилке, не подключаясь к той же сети.
• Выставить веб-сервер для получения веб-хуков для отладки telegram-бота.
• Выставить для отладки порт доступный только на localhost удалённого сервера.
• Отладить что-то, доступное только по https. Виджеты Stripe, например.

Возможно, вы знаете об инструменте ngrok, который тоже под эти задачи подходит. Вот чем serveo лучше:

• Работает через обычные ssh-туннели и, как следствие, не требует отдельного клиента — достаточно стандартного ssh. Под windows можно использовать ssh внутри WSL.
• Можно выбрать любой свободный поддомен. У ngrok это платный функционал.
• Можно подключить свой домен. И тоже бесплатно.

Я подключил свой поддомен к serveo и добавил в ~/.bashrc следующую функцию:

serveo () { ssh -R dev.roboxv.pro:80:localhost:$1 serveo.net; }

И теперь мне достаточно выполнить команду serveo 3000, чтобы выставить 3000 порт на собственном и зафиксированном домене. Удобно.

Обновление от августа 2022: serveo помер, есть похожий localhost.run
  • 👍 1
Post #14 590
Виртуальные хосты при локальной разработке

В ходе разработки некоторых проектов бывает необходимо учитывать виртуальные хосты или поддомены на одном и том же сервере. Стандартным localhost не обойтись. Вот какие есть варианты.

👎 Правка /etc/hosts (или %WINDIR%\system32\drivers\etc\hosts)
Просто и всегда доступно. Но не поддерживает wildcard. Не работает в случаях, когда нужно потестить проект с телефона или любого другого устройства. Да и в целом удобства мало.

👎 Локальный DNS-сервер.
Гибко настраивается. Решает проблему с wildcard. Работает на других устройствах, но требует либо переконфигурации DHCP-сервера, либо ручного добавление DNS-сервера на каждом клиенте.

👍 Публичный wildcard DNS сервер. Такие как: xip.io, nip.io, sslip.io. Исходя из названия, поддерживает wildcard. Не требует конфигурации вообще. Работает на любом устройстве с доступом в интернет.

Как это работает. Допустим, наш сервер для разработки висит на машине с адресом 192.168.1.2 на 3000 порту. Берём телефон, подключенный к той же сети и открываем http://foosubdomain.192.168.1.2.xip.io:3000. DNS-сервер xip.io извлекает IP-адрес из этого хоста и резолвит в него же. Запрос приходит на наш сервер. А дальше уже дело за ним, как обработать этот hostname.

UPDATE от ноября 2020: для локалхоста есть решение ещё проще — lvh.me

Гениальное по своей простоте решение.
nip.io Welcome to nip.io / sslip.io
  • 👍 1
Post #1
Channel created
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →