Как открыть браузер на localhost через скрипты npm

Я пытался понять, как написать npm script, который завершится запуском приложения в браузере пользователя без необходимости вручную открывать браузер и переходить к localhost:1234.

Прямо сейчас мой сценарий читается так:

"start": "npm run build && npm run dev",
"build": "npm run clean && npm run mkdir && npm run build:html && npm run build:css && npm run build:js",
"dev": "webpack-dev-server --inline --hot --content-base build --history-api-fallback",

Хотите добавить "open": <some code here>,

Поэтому, когда кто-то заходит на GitHub и клонирует или разветвляет мой репозиторий, им даются инструкции по запуску приложения. Я просто подумал, что автоматизация этого будет хорошим дополнением.

Кто-нибудь знает, как это возможно? Я почти уверен, что это так, и думаю, что это как-то связано с вызовом команды в bash. Заранее спасибо за помощь!


person rockchalkwushock    schedule 21.11.2016    source источник
comment
Возможно, вы сможете уточнить, чтобы повысить свои шансы на получение ответа ... 1) Когда кто-то набирает npm run open через свой интерфейс командной строки, вы намереваетесь ли вы запустить команду для запуска инструкций по запуску приложения который, например: instructions.html, (находится в папке проекта), в их браузере по умолчанию по адресу: localhost:1234? 2) Или нужно npm run open перейти к открытию приложений index.html на localhost:1234. Если ответ на 1 утвердительный, должен ли он быть из localhost:1234 или достаточно просто открыть instructions.html в браузере?   -  person RobC    schedule 19.12.2016
comment
@RobC, моя вина, что я написал это довольно расплывчато. Я стремлюсь написать сценарий, который откроет приложение в браузере пользователя (я предполагаю, что ОС сделает это в браузере пользователя по умолчанию). Таким образом, сценарий start сначала выполнит build, затем запустит сервер, работающий на localhost:1234, и, наконец, open приложение в браузере пользователя, размещенное на localhost:1234. Я предполагаю, что для этого open скрипт должен быть командами оболочки.   -  person rockchalkwushock    schedule 21.12.2016


Ответы (6)


Этого можно добиться, включив в ваш проект пару дополнительных пакетов.

Дополнительные пакеты

Установите https://www.npmjs.com/package/http-server:

$ npm install http-server --save-dev

и одновременно:

$ npm install concurrently --save-dev

скрипты npm

Добавьте в package.json следующий open скрипт:

"scripts": {
    "start": "npm run open",
    "open": "concurrently \"http-server -a localhost -p 1234\" \"open http://localhost:1234/build\""
 }

Примечание

  1. start будет фактически определен следующим образом, чтобы включать в себя задачи, которые у вас есть в настоящее время:

    "start": "npm run build && npm run dev && npm run open",
    
  2. Код в сценарии open выше, который гласит:

    open http://localhost:1234/build
    

    ... предполагает, что задача build, которую вы ранее определили, выводит index.html в папку build. Если файл назван по-другому, вам нужно будет его определить. Например.

    open http://localhost:1234/build/the_html_file_name.html
    
  3. Возможно, вам потребуется добавить задержку между запуском сервера и открытием файла, чтобы немного подождать, пока сервер не запустится. В этом случае также установите sleep-ms:

    $ npm install sleep-ms --save-dev
    

    и измените сценарий open на:

    "open": "concurrently \"http-server -a localhost -p 1234\" \"sleepms 1000 && open http://localhost:1234/build\""
    

Кросс-платформенный

К сожалению, команда open не поддерживается на разных платформах. Чтобы решить эту проблему, воспользуйтесь opener или opn-cli и соответственно замените команду.

Однако оба пакета (opener и opn-cli) используют Object.assign (), поэтому не будет работать в старых версиях nodejs.

Изменить: чтобы открыть окно браузера после запуска сервера, http-server теперь принимает -o вариант. Его можно использовать вместо пакетов opener или opn-cli.

person RobC    schedule 21.12.2016
comment
Большое спасибо, это именно то, что я пытался сделать! Отличное написание тоже. Я ценю помощь. - person rockchalkwushock; 22.12.2016
comment
Я не знаю, была ли эта функция доступна в то время, но теперь вы можете просто добавить параметр -o в http-server, и он откроет для вас браузер. - person Lourenzo Ferreira; 21.06.2018
comment
Создается как https независимо от настроек, измените URL-адрес на http, и он просто возвращается к https каждый раз. Страница не загружается с этим сайтом не всегда отображается ошибка безопасного соединения. - person DiggyJohn; 13.03.2020
comment
@DiggyJohn - К какому адресу localhost вы пытаетесь получить доступ? а какой браузер вы используете? - person RobC; 13.03.2020
comment
@RobC Ты живая заставка, у меня ничего не получилось (open, open-cli) Ты молодец! - person A B; 18.05.2021

Вам просто понадобится :
start http://localhost:1234 (я тестировал в Windows 10).

Вам понадобятся следующие скрипты:
"open": "start http://localhost:1234"

Но вы должны обратить внимание, что в Windows 10 вы должны разместить start http://localhost:1234 перед запуском вашего сервера node.js.

person Lancer.Yan    schedule 28.03.2018
comment
Лучший ответ для пользователей Windows без 3rd party библиотек. - person T.Todua; 14.12.2020

Для пользователей Webpack: OpenBrowserPlugin тоже делает свое дело!

Установите одну зависимость:

npm install open-browser-webpack-plugin --save-dev

И добавьте это в файл конфигурации веб-пакета:

var OpenBrowserPlugin = require('open-browser-webpack-plugin');

...

plugins: [
  new OpenBrowserPlugin({ url: 'http://localhost:3000' })
]

Обновление (май 2019 г.)

Обратите внимание, что OpenBrowserPlugin заброшен, и серьезная уязвимость некоторое время не исправлялась. Однако Родригопандини здесь раздвоил. Используйте npm install rodrigopandini / open-browser-webpack-plugin, чтобы использовать его.

person Made in Moon    schedule 14.08.2017
comment
Обратите внимание, что от OpenBrowserPlugin отказались, а серьезная уязвимость не была исправлена ​​для в то время как. Однако rodrigopandini разветвил его здесь. Используйте npm install rodrigopandini/open-browser-webpack-plugin, чтобы использовать его. - person Mausam; 03.05.2019

Команда для открытия URL (расширение или библиотека не требуется):

"script_name": "start http://localhost:8080"


Ставим с другими командами:

"script_name": "set Node_ENV=development& start http://localhost:8080& nodemon app.js"

* ПРИМЕЧАНИЕ: не помещайте его после команды node или nodemon, иначе это не сработает.


Additional info:
  • Он откроет URL-адрес в браузере по умолчанию.

  • Сначала в браузере может отображаться сообщение «Не удалось загрузить», потому что для запуска сервера требуется некоторое время. Но он обновится автоматически, когда сервер запустится, если нет, то просто обновите вручную.

person Rajan    schedule 26.01.2021

Изменять

начало: npm run build && npm run dev,

to

start: открыть http: // localhost: 3000 && npm run build && npm run dev,

Работает на macOS. Возможно, вам потребуется обновить окно браузера после запуска сервера.

person Alexey Shurygin    schedule 22.03.2021

Если вы используете Webpack. Есть другой способ сделать это с помощью webpack-dev-server

  • Установите его с помощью npm install webpack-dev-server --save-dev
  • Затем запустите webpack-dev-server или настройте npm script следующим образом:
    "start": "webpack-dev-server"

  • Затем перейдите к http://localhost:8080

Он обслуживает файлы по умолчанию в текущем каталоге. Если вы хотите обслуживать файлы из другого каталога, вам нужно использовать параметр --content-base следующим образом:

webpack-dev-server --content-base thefolderyouwanttoserve/

Подробнее о webpack-dev-serverе здесь в официальном документе webpack.

person billyjov    schedule 04.10.2018
comment
Вопрос заключался в том, чтобы NPM физически открывал браузер с URL-адресом разработчика, а не запускал сервер. - person Paul McClean; 26.02.2019