UNPKG

build-boiler

Version:

Build Boilerplate using Webpack, Eslint, Assemble, Nunjucks, and BrowserSync

208 lines (156 loc) 6.82 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); exports.default = function (gulp, plugins, config) { var _arguments = arguments; var sources = config.sources; var utils = config.utils; var environment = config.environment; var webpackConfig = config.webpackConfig; var mainBundleName = sources.mainBundleName; var isDev = environment.isDev; var isIE = environment.isIE; var assetPath = environment.asset_path; var branch = environment.branch; var parentMiddleware = webpackConfig.middleware; var hot = webpackConfig.hot; var getTaskName = utils.getTaskName; var buildDir = sources.buildDir; var devPort = sources.devPort; var devHost = sources.devHost; var hotPort = sources.hotPort; var gutil = plugins.gutil; var app = plugins.app; var publicPath = undefined; return function (cb) { var taskName = getTaskName(gulp.currentTask); var isMainTask = taskName === mainBundleName; var runHot = isMainTask && !isIE && hot; var devPath = isDev ? 'http://' + devHost + ':' + hotPort + '/' : '/'; var bsPath = isDev ? 'http://' + devHost + ':' + devPort + '/' : '/'; if (runHot) { publicPath = (0, _lodash.isUndefined)(branch) ? devPath : assetPath; } else { publicPath = (0, _lodash.isUndefined)(branch) ? bsPath : assetPath; } var baseConfig = (0, _lodash.assign)({}, config, { isMainTask: isMainTask, publicPath: publicPath, app: app }); var webpackConfig = (0, _makeWebpackConfig2.default)(baseConfig); var parentConfig = (0, _runParentFn2.default)(_arguments, { data: webpackConfig }); var data = parentConfig.data; var fn = parentConfig.fn; var task = function task(done) { var compiler = (0, _webpack2.default)(data); function logger(err, stats) { if (err) { throw new gutil.PluginError({ plugin: '[webpack]', message: err.message }); } if (!isDev) { gutil.log(stats.toString()); } } compiler.plugin('compile', function () { gutil.log('Webpack Bundling ' + taskName + ' bundle'); }); compiler.plugin('done', function (stats) { gutil.log('Webpack Bundled ' + taskName + ' bundle in ' + (stats.endTime - stats.startTime) + 'ms'); if (stats.hasErrors() || stats.hasWarnings()) { var _stats$toJson = stats.toJson({ errorDetails: true }); var errors = _stats$toJson.errors; var warnings = _stats$toJson.warnings; [errors, warnings].forEach(function (stat, i) { var type = i ? 'warning' : 'error'; if (stat.length) { var _stat = _slicedToArray(stat, 1); var statStr = _stat[0]; /*eslint-disable*/ var _statStr$split = statStr.split('\n\n'); var _statStr$split2 = _toArray(_statStr$split); var first = _statStr$split2[0]; var rest = _statStr$split2.slice(1); /*eslint-enable*/ if (rest.length) { gutil.log('[webpack: ' + taskName + ' bundle ' + type + ']\n', rest.join('\n\n')); } else { gutil.log('[webpack: ' + taskName + ' bundle ' + type + ']', stats.toString()); } } }); if (!isDev) { process.exit(1); } } //avoid multiple calls of gulp callback if ((0, _lodash.isFunction)(done)) { var gulpCb = done; done = null; gulpCb(); } }); if (isDev) { if (runHot) { (function () { var app = new _express2.default(); var serverOptions = { contentBase: buildDir, quiet: true, noInfo: true, hot: true, inline: true, lazy: false, publicPath: publicPath, headers: { 'Access-Control-Allow-Origin': '*' }, stats: { colors: true } }; var hasRun = false; (0, _lodash.isFunction)(parentMiddleware) && parentMiddleware(config, app); app.use((0, _webpackDevMiddleware2.default)(compiler, serverOptions)); app.use((0, _webpackHotMiddleware2.default)(compiler)); compiler.plugin('done', function (stats) { if (!hasRun) { app.listen(hotPort, function (err) { if (err) { console.error(err); } else { console.info('==> 🚧 Webpack development server listening on port %s', hotPort); } hasRun = true; }); } }); })(); } else { compiler.watch({ aggregateTimeout: 300, poll: true }, logger); } } else { compiler.run(logger); } }; return (0, _runCustomTask2.default)(task, fn, cb); }; }; var _lodash = require('lodash'); var _webpack = require('webpack'); var _webpack2 = _interopRequireDefault(_webpack); var _makeWebpackConfig = require('./make-webpack-config'); var _makeWebpackConfig2 = _interopRequireDefault(_makeWebpackConfig); var _runParentFn = require('../../utils/run-parent-fn'); var _runParentFn2 = _interopRequireDefault(_runParentFn); var _runCustomTask = require('../../utils/run-custom-task'); var _runCustomTask2 = _interopRequireDefault(_runCustomTask); var _express = require('express'); var _express2 = _interopRequireDefault(_express); var _webpackDevMiddleware = require('webpack-dev-middleware'); var _webpackDevMiddleware2 = _interopRequireDefault(_webpackDevMiddleware); var _webpackHotMiddleware = require('webpack-hot-middleware'); var _webpackHotMiddleware2 = _interopRequireDefault(_webpackHotMiddleware); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); } module.exports = exports['default'];