2015-10-24 4 views
15

Gulp + live reload обслуживает мой контент на localhost и (вот что мне нужно) запускает браузер автоматически на сервере url всякий раз, когда я запускаю команду gulp (т.е. мне не нужно щелкните значок браузера и перейдите к URL-адресу вручную). Это можно сделать и в Webpack?Webpack запускает браузер автоматически

Я пробовал плагин под названием open-browser-webpack-plugin, но я не мог заставить его работать.

ответ

24

Для веб-страницы версии 2.х, вы просто добавить --open открытый для CLI как описано здесь:

https://webpack.js.org/configuration/dev-server/#devserver-open

+4

Одна проблема, которую я нашел, это открытие ссылки, прежде чем сборка файлов будет завершена. Будет лучше, если он откроет ссылку, когда все будет готово. – new2cpp

1

Ive с успехом использовал BrowserSync с веб-пакетом.

В webpack.config.js я включаю это:

var options = { 
    port: 9001, 
    host: 'localhost', 
    server: { 
     baseDir: './public' 
    }, 
    ui: { 
     port: 9002 
    }, 
    startPath: process.argv[3].substr(2), 
} 

var browserSync = require('browser-sync'); 
browserSync(['public/**/*.*'],options); 
+3

Благодаря кучу для ответа @thimthez, однако BrowserSync выглядит довольно большая машина, чтобы принять, чтобы справиться с такой маленькой вещи. Возможно, включен автоматический запуск браузера, но такие вещи, как «Interaction sync», «UI или CLI control» и «History History» (согласно их домашней странице). Чтобы уточнить: Горячая загрузка здесь не проблема, просто открыв браузер автоматически и перейдя по указанному URL-адресу при запуске команды «webpack». Спасибо, что помогли мне уточнить вопрос! – swelet

4

Поскольку большинство из нас используют узел (и НПМ) в эти дни: поставить команду в стартовом НПМ сценария:

MAC

"scripts": { 
    "start": "webpack-dev-server & open http://localhost:8080/" 
    } 

WINDOWS

"scripts": { 
    "start": "start http://localhost:8000/ & webpack-dev-server" 
} 

Благодаря Enzo Ferey за то, что он должен выглядеть по-разному в Windows.

+0

Проблема в том, что вы не учитываете конфигурацию webpack. У вас есть жестко закодированный URL 'http: // localhost: 8080 /', и это не всегда так. Но в качестве обходного пути это может сработать. – WhiteAngel

+0

Это то, что я делаю, но я нахожу, что мне нужно pkill сервер, если я Ctrl-C, чтобы вырваться из него. Как это обойти? –

+0

@ DanNguyen да меня тоже. Однако проблема не относится к этому способу запуска приложения, это связано с webpack-dev-сервером в целом. – swelet

3

In a previous comment, я отметил, что принятый в настоящее время ответ действительно работает, но имеет побочный эффект от нереста процесса, который необходимо убить вручную. С тех пор я понял, что более канонический способ инициировать открытое действие браузера без использования отдельного плагина webpack.

Тем не менее, вам необходимо установить более общий пакет NPM: open

Затем создайте новый файл в папку проекта под названием server.js. Вот пример реализации (обратите внимание, что в ES6):

'use strict'; 
const webpack = require('webpack'); 
const WebpackDevServer = require('webpack-dev-server'); 
const config = require('./webpack.config'); 


const open = require('open'); 
const port_number = 8080; 

let target_entry = 'http://localhost:' + port_number + '/'; 
config.entry.unshift("webpack-dev-server/client?" + target_entry); 

new WebpackDevServer(webpack(config), {contentBase: 'src', hot: true, stats: { colors: true }, publicPath: '/assets/'}) 
.listen(port_number, 'localhost' , (err) => { 
    if (err) { 
    console.log(err); 
    } 
    console.log('Listening at localhost:' + port_number); 
    console.log('Opening your system browser...'); 
    open(target_entry); 
}); 

Обратите внимание, что эта строка:

config.entry.unshift("webpack-dev-server/client?" + target_entry); 

- означает, что вы можете удалить вызов webpack-dev-server/client?... из webpack.config.js, так как это unshift команда вставьте строку в config.entry ... это полезная модуляция, когда вам нужно настроить приложение с несколькими средами и разными точками входа.

Наконец, в package.json, это то, что команда start должна выглядеть следующим образом: вызов node запустить server.js:

"scripts": { 
    "start": "node server.js", 
    //... 
    } 
7

Emelet ответ не ложен на всех, однако он не будет работать в Windows, , Я делаю это с:

"scripts": { 
    "start": "start http://localhost:8000/ & webpack-dev-server" 
} 

100% работает, и вам не нужно устанавливать какой-либо модуль или плагин.

+0

Спасибо, что указали это! – swelet

Смежные вопросы