forked from webforgeeu/webpack-copy-on-plugin
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
78 lines (68 loc) · 2.35 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
const fse = require("fs-extra");
const path = require('path');
function WebpackCopyOnPlugin(eventHook, mappings, options, folders) {
this._mappings = mappings || {};
this._options = options || {};
this._folders = folders || [];
this._eventHook = eventHook || '';
}
WebpackCopyOnPlugin.prototype.apply = function(compiler) {
const mappings = this._mappings;
const options = this._options;
const folders = this._folders;
const eventHook = this._eventHook;
const mapTo = (mapping, outputPath) => {
let to;
if ( options.absoluteMappingPaths ){
to = mapping;
} else if (options.dirname) {
to = path.resolve(options.dirname, mapping);
} else {
to = outputPath + "/" + mapping;
}
return to;
};
const copyFolder = (from, to) => {
let fromPath;
let toPath;
if (options.dirname) {
fromPath = path.resolve(options.dirname, from);
toPath = path.resolve(options.dirname, to);
} else {
fromPath = from;
toPath = to;
}
fse.copySync(fromPath, toPath);
};
compiler.plugin(eventHook, function(stats) {
const statsJson = stats.toJson ? stats.toJson() : {};
const chunks = statsJson.chunks ? statsJson.chunks : [];
chunks.forEach(function(chunk) {
const chunkName = chunk.names[0];
let mapping = mappings[chunkName];
if (mapping) {
const devServer = compiler.options.devServer;
let outputPath;
if (devServer && devServer.contentBase) {
outputPath = devServer.contentBase;
} else {
outputPath = compiler.options.output.path;
}
let chunkFilename = chunk.files[0];
const from = outputPath + "/" + chunkFilename;
let to;
if(!Array.isArray(mapping)){
mapping = [mapping]
}
mapping.forEach( (mapEntry) => {
to = mapTo(mapEntry, outputPath);
fse.copySync(from, to);
});
}
});
folders.forEach( (fromTo) => {
copyFolder(fromTo[0], fromTo[1])
});
});
};
module.exports = WebpackCopyOnPlugin;