2017-09-13 07:52:34 +02:00

55 lines
1.4 KiB
JavaScript
Vendored

var _ = require('lodash');
var browserSync = require('browser-sync');
function BrowserSyncPlugin(browserSyncOptions, pluginOptions) {
var self = this;
var defaultPluginOptions = {
reload: true,
name: 'bs-webpack-plugin',
callback: undefined
};
self.browserSyncOptions = _.extend({}, browserSyncOptions);
self.options = _.extend({}, defaultPluginOptions, pluginOptions);
self.browserSync = browserSync.create(self.options.name);
self.isWebpackWatching = false;
self.isBrowserSyncRunning = false;
}
BrowserSyncPlugin.prototype.apply = function (compiler) {
var self = this;
compiler.plugin('watch-run', function (watching, callback) {
self.isWebpackWatching = true;
callback(null, null);
});
compiler.plugin('compilation', function () {
if (self.isBrowserSyncRunning) {
self.browserSync.notify('Rebuilding...');
}
});
compiler.plugin('done', function (stats) {
if (self.isWebpackWatching) {
if (self.isBrowserSyncRunning) {
if (self.options.reload) {
self.browserSync.reload();
}
} else {
if (_.isFunction(self.options.callback)) {
self.browserSync.init(self.browserSyncOptions, self.options.callback);
} else {
self.browserSync.init(self.browserSyncOptions);
}
self.isBrowserSyncRunning = true;
}
}
});
};
module.exports = BrowserSyncPlugin;