Skip to content

Commit 440f6cb

Browse files
committed
index.js decomposed into lib files
1 parent 0d2988a commit 440f6cb

File tree

3 files changed

+72
-65
lines changed

3 files changed

+72
-65
lines changed

index.js

Lines changed: 1 addition & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,3 @@
1-
const { extend, get, isFunction } = require('lodash')
2-
const browserSync = require('browser-sync')
3-
4-
function BrowserSyncPlugin(browserSyncOptions, pluginOptions) {
5-
const defaultPluginOptions = {
6-
reload: true,
7-
name: 'bs-webpack-plugin',
8-
callback: undefined,
9-
injectCss: false
10-
}
11-
12-
this.browserSyncOptions = extend({}, browserSyncOptions)
13-
this.options = extend({}, defaultPluginOptions, pluginOptions)
14-
15-
this.browserSync = browserSync.create(this.options.name)
16-
this.isWebpackWatching = false
17-
this.isBrowserSyncRunning = false
18-
}
19-
20-
function isCssOnlyEmission(stats) {
21-
const assetsStatsMapping = get(stats, 'compilation.assets', {})
22-
const assetsNames = Object.keys(assetsStatsMapping)
23-
24-
return (
25-
assetsNames
26-
.map(assetName => ({ name: assetName, wasEmitted: get(assetsStatsMapping, [assetName, 'emitted'], false) }))
27-
.filter(asset => asset.wasEmitted)
28-
.every(asset => asset.name.includes('.css'))
29-
)
30-
}
31-
32-
BrowserSyncPlugin.prototype.apply = function (compiler) {
33-
compiler.plugin('watch-run', (watching, callback) => {
34-
this.isWebpackWatching = true
35-
callback(null, null)
36-
})
37-
38-
compiler.plugin('compilation', () => {
39-
if (this.isBrowserSyncRunning && this.browserSyncOptions.notify) {
40-
this.browserSync.notify('Rebuilding...')
41-
}
42-
})
43-
44-
compiler.plugin('done', stats => {
45-
if (this.isWebpackWatching) {
46-
if (this.isBrowserSyncRunning) {
47-
if (this.options.reload) {
48-
if (this.options.injectCss && isCssOnlyEmission(stats)) {
49-
this.browserSync.reload('*.css')
50-
} else {
51-
this.browserSync.reload()
52-
}
53-
}
54-
} else {
55-
if (isFunction(this.options.callback)) {
56-
this.browserSync.init(this.browserSyncOptions, this.options.callback)
57-
} else {
58-
this.browserSync.init(this.browserSyncOptions)
59-
}
60-
61-
this.isBrowserSyncRunning = true
62-
}
63-
}
64-
})
65-
}
1+
const BrowserSyncPlugin = require('./lib/BrowserSyncPlugin')
662

673
module.exports = BrowserSyncPlugin

lib/BrowserSyncPlugin.js

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
const { extend, isFunction } = require('lodash')
2+
const browserSync = require('browser-sync')
3+
const isCssOnlyEmission = require('./isCssOnlyEmission')
4+
5+
function BrowserSyncPlugin(browserSyncOptions, pluginOptions) {
6+
const defaultPluginOptions = {
7+
reload: true,
8+
name: 'bs-webpack-plugin',
9+
callback: undefined,
10+
injectCss: false
11+
}
12+
13+
this.browserSyncOptions = extend({}, browserSyncOptions)
14+
this.options = extend({}, defaultPluginOptions, pluginOptions)
15+
16+
this.browserSync = browserSync.create(this.options.name)
17+
this.isWebpackWatching = false
18+
this.isBrowserSyncRunning = false
19+
}
20+
21+
BrowserSyncPlugin.prototype.apply = function (compiler) {
22+
compiler.plugin('watch-run', (watching, callback) => {
23+
this.isWebpackWatching = true
24+
callback(null, null)
25+
})
26+
27+
compiler.plugin('compilation', () => {
28+
if (this.isBrowserSyncRunning && this.browserSyncOptions.notify) {
29+
this.browserSync.notify('Rebuilding...')
30+
}
31+
})
32+
33+
compiler.plugin('done', stats => {
34+
if (this.isWebpackWatching) {
35+
if (this.isBrowserSyncRunning) {
36+
if (this.options.reload) {
37+
if (this.options.injectCss && isCssOnlyEmission(stats)) {
38+
this.browserSync.reload('*.css')
39+
} else {
40+
this.browserSync.reload()
41+
}
42+
}
43+
} else {
44+
if (isFunction(this.options.callback)) {
45+
this.browserSync.init(this.browserSyncOptions, this.options.callback)
46+
} else {
47+
this.browserSync.init(this.browserSyncOptions)
48+
}
49+
50+
this.isBrowserSyncRunning = true
51+
}
52+
}
53+
})
54+
}
55+
56+
module.exports = BrowserSyncPlugin

lib/isCssOnlyEmission.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
const { get } = require('lodash')
2+
3+
function isCssOnlyEmission(stats) {
4+
const assetsStatsMapping = get(stats, 'compilation.assets', {})
5+
const assetsNames = Object.keys(assetsStatsMapping)
6+
7+
return (
8+
assetsNames
9+
.map(assetName => ({ name: assetName, wasEmitted: get(assetsStatsMapping, [assetName, 'emitted'], false) }))
10+
.filter(asset => asset.wasEmitted)
11+
.every(asset => asset.name.includes('.css'))
12+
)
13+
}
14+
15+
module.exports = isCssOnlyEmission

0 commit comments

Comments
 (0)