forked from mpvue/webpack-mpvue-asset-plugin
-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.js
41 lines (38 loc) · 1.41 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
function MpvuePlugin() {}
MpvuePlugin.prototype.apply = function(compiler) {
const {options: {entry, output: {publicPath}, plugins}} = compiler;
compiler.plugin('emit', function(compilation, callback) {
let commonsChunkNames = [];
// 获取所有的 chunk name
plugins.forEach(item => {
let { chunkNames } = item;
if (item.constructor.name === 'CommonsChunkPlugin' && chunkNames) {
commonsChunkNames = commonsChunkNames.concat(chunkNames);
}
})
let pages = Object.keys(entry);
compilation.chunks.forEach(commonChunk => {
const { files, chunks: childChunks, name } = commonChunk;
let commonWxssFile = files.find(item => item.endsWith('.wxss'));
if (commonsChunkNames.indexOf(name) > -1 && commonWxssFile) {
childChunks.forEach(item => {
let wxssFile = item.files.find(item => item.endsWith('.wxss'));
if (item.name === 'app' && wxssFile) { // 过滤 app
return;
}
try {
if (compilation.assets[wxssFile]) {
let wxss = compilation.assets[wxssFile].source();
wxss = `@import "${publicPath}/${commonWxssFile}";\n${wxss}`;
compilation.assets[wxssFile].source = () => wxss;
}
} catch (error) {
console.error(error, wxssFile)
}
})
}
});
callback();
});
};
module.exports = MpvuePlugin;