-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathreplace-app-id.ts
46 lines (37 loc) · 1.13 KB
/
replace-app-id.ts
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
import type { IReplaceAppIdOptions } from './types';
function changeAppId({ content, appId }: { content: string; appId: string; }) {
const reg = /(?<="appid":\s*")(\w+)(?=",)/;
return content.replace(reg, () => appId);
}
export class ReplaceAppIdPlugin {
appId: string;
constructor(options: IReplaceAppIdOptions) {
const { appId } = options;
this.appId = appId;
}
apply(complier: any) {
complier.hooks.emit.tapAsync('ReplaceAppIdPlugin', (compilation: any, cb: Function) => {
try {
this.doReplace(compilation, cb);
} catch (err) {
console.warn('[ReplaceAppIdPlugin] err: ', err);
}
});
}
doReplace(compilation: any, cb: Function) {
const { appId } = this;
const { assets } = compilation;
const key = 'project.config.json';
const asset = assets[key];
if (!asset) return;
if (asset._valueIsBuffer) return;
const sourceCode = asset.source() || asset._valueAsString || asset._value || asset._cachedSource;
if (sourceCode != null) {
asset.source = () => changeAppId({
content: sourceCode,
appId,
});
}
cb?.();
}
}