MCPcopy Create free account
hub / github.com/Tencent/QMUI_Web / mergeReference

Function mergeReference

workflow/basicTasks/merge.js:26–112  ·  view source on GitHub ↗
(rules)

Source from the content-addressed store, hash-verified

24 const taskName = 'merge';
25
26 const mergeReference = (rules) => {
27 // 基于 https://github.com/aDaiCode/gulp-merge-link
28 rules = rules || [];
29
30 const linkRegex = /<link(?:\s+|\s+.+\s+)href\s*=\s*["']?(.+\.css).*?>/g;
31 const scriptRegex = /<script(?:\s+|\s+.+\s+)src\s*=\s*["']?(.+\.js).*?script\s*>/g;
32
33 const linkTemplate = (href) => '<link rel="stylesheet" href="' + href + '"/>';
34 const scriptTemplate = (src) => '<script type="text/javascript" src="' + src + '"></script>';
35
36 const getReference = (reg, contents) => {
37 let result;
38 const references = [];
39 /* eslint-disable no-cond-assign */
40 while (result = reg.exec(contents)) {
41 references.push({
42 match: result[0],
43 url: result[1].trim().replace(/^\.\//, '')
44 });
45 }
46 /* eslint-enable no-cond-assign */
47 return references;
48 };
49
50 const getTemplate = (url) => {
51 const isScript = (/\.js$/).test(url);
52 if (isScript) {
53 return scriptTemplate(url);
54 }
55 return linkTemplate(url);
56 };
57
58 return through.obj((file, encoding, callback) => {
59 if (file.isNull() || file.isStream()) {
60 return callback(null, file);
61 }
62
63 let contents = String(file.contents);
64 let references = [];
65 const replaceList = [];
66 const flag = {};
67
68 // 获取所有引用
69 references = references.concat(getReference(linkRegex, contents)).concat(getReference(scriptRegex, contents));
70
71 // 循环所有引用,检测是否需要进行处理
72 for (const key in references) {
73 const reference = references[key];
74
75 for (const targetUrl in rules) {
76 // 把引用与传入的合并规则进行对比,把命中规则的引用进行合并处理
77 if (!rules.hasOwnProperty(targetUrl)) {
78 break;
79 }
80 const sourceUrls = rules[targetUrl];
81
82 const sourceUrlFound = sourceUrls.find((sourceUrl) => {
83 sourceUrl = sourceUrl.trim().replace(/^\.\//, '');

Callers 1

merge.jsFile · 0.85

Calls 3

getReferenceFunction · 0.85
getTemplateFunction · 0.85
logMethod · 0.80

Tested by

no test coverage detected