123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- /**
- * React Static Boilerplate
- * https://github.com/koistya/react-static-boilerplate
- *
- * Copyright © 2015-2016 Konstantin Tarkus (@koistya)
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE.txt file in the root directory of this source tree.
- */
- const path = require('path')
- const browserSync = require('browser-sync')
- const webpack = require('webpack')
- const webpackDevMiddleware = require('webpack-dev-middleware')
- const webpackHotMiddleware = require('webpack-hot-middleware')
- const task = require('./task')
- const webpackConfig = require('../webpack.config')
- task('start', () => new Promise(resolve => {
- // Hot Module Replacement (HMR) + React Hot Reload
- if (webpackConfig.debug) {
- webpackConfig.entry.vendor
- .unshift('react-hot-loader/patch', 'webpack-hot-middleware/client')
- webpackConfig.module.loaders
- .find(x => x.loader === 'babel-loader').query.plugins
- .unshift('react-hot-loader/babel')
- webpackConfig.plugins.push(new webpack.HotModuleReplacementPlugin())
- webpackConfig.plugins.push(new webpack.NoErrorsPlugin())
- }
- const bundler = webpack(webpackConfig)
- browserSync({
- port: Number(process.env.PORT || 3000),
- ui: {
- port: Number(process.env.PORT || 3000) + 1,
- },
- server: {
- baseDir: './src',
- middleware: [
- webpackDevMiddleware(bundler, {
- // IMPORTANT: dev middleware can't access webpackConfig, so we should
- // provide publicPath by ourselves
- publicPath: webpackConfig.output.publicPath,
- // pretty colored output
- stats: webpackConfig.stats,
- // for other settings see
- // http://webpack.github.io/docs/webpack-dev-middleware.html
- }),
- // bundler should be the same as above
- webpackHotMiddleware(bundler),
- // Serve index.html for all unknown requests
- (req, res, next) => {
- if (req.headers.accept.startsWith('text/html')) {
- const filename = path.join(bundler.outputPath, 'index.html')
- bundler.outputFileSystem.readFile(filename, (err, result) => {
- if (err) {
- next(err)
- return
- }
- res.setHeader('Content-Type', 'text/html')
- res.end(result)
- })
- }
- next()
- },
- ],
- },
- // no need to watch '*.js' here, webpack will take care of it for us,
- // including full page reloads if HMR won't work
- files: [
- 'build/**/*.css',
- 'build/**/*.html',
- ],
- })
- resolve()
- }))
|