plugin-light
Version:
Webpack 相关插件、Loader、基础配置及 CLI 命令
1,226 lines (1,189 loc) • 192 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var tComm = require('t-comm');
var fs = require('fs');
var path = require('path');
var traverse = require('@babel/traverse');
var generate = require('@babel/generator');
var parser = require('@babel/parser');
var childProcess = require('child_process');
var fs$1 = require('fs-extra');
var os = require('os');
var XRegExp = require('xregexp');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n["default"] = e;
return Object.freeze(n);
}
var fs__namespace = /*#__PURE__*/_interopNamespace(fs);
var fs__default$1 = /*#__PURE__*/_interopDefaultLegacy(fs);
var path__namespace = /*#__PURE__*/_interopNamespace(path);
var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
var traverse__default = /*#__PURE__*/_interopDefaultLegacy(traverse);
var generate__default = /*#__PURE__*/_interopDefaultLegacy(generate);
var parser__namespace = /*#__PURE__*/_interopNamespace(parser);
var childProcess__namespace = /*#__PURE__*/_interopNamespace(childProcess);
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs$1);
var os__namespace = /*#__PURE__*/_interopNamespace(os);
var XRegExp__namespace = /*#__PURE__*/_interopNamespace(XRegExp);
function _typeof$1(o) {
"@babel/helpers - typeof";
return _typeof$1 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof$1(o);
}
function _toPrimitive(input, hint) {
if (_typeof$1(input) !== "object" || input === null) return input;
var prim = input[Symbol.toPrimitive];
if (prim !== undefined) {
var res = prim.call(input, hint || "default");
if (_typeof$1(res) !== "object") return res;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return (hint === "string" ? String : Number)(input);
}
function _toPropertyKey(arg) {
var key = _toPrimitive(arg, "string");
return _typeof$1(key) === "symbol" ? key : String(key);
}
function _defineProperty(obj, key, value) {
key = _toPropertyKey(key);
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function ownKeys$6(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread$6(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$6(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$6(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
/**
* 识别动态组件,自动添加对应componentPlaceholder
*/
var AddPlaceHolderPlugin = /*#__PURE__*/function () {
function AddPlaceHolderPlugin() {
_classCallCheck(this, AddPlaceHolderPlugin);
}
_createClass(AddPlaceHolderPlugin, [{
key: "apply",
value: function apply(compiler) {
if (process.env.UNI_PLATFORM !== 'mp-weixin' && process.env.UNI_PLATFORM !== 'mp-qq') return;
compiler.hooks.emit.tapAsync('AddPlaceHolderPlugin', function (compilation, callback) {
var fileNames = Object.keys(compilation.assets);
var _loop = function _loop() {
var _global;
var fileName = _fileNames[_i];
if (/\.(json)$/.test(fileName) === false) {
return 0; // continue
}
var asset = compilation.assets[fileName];
if (asset._valueIsBuffer) {
return 0; // continue
}
var compPath = fileName.replace('.json', '').replace('../../', '');
if ((_global = global) !== null && _global !== void 0 && _global.placeholderMap) {
global.placeholderMap.forEach(function (value, key) {
if (key.endsWith(compPath)) {
var sourceCode = asset.source();
var sourceObj = JSON.parse(sourceCode);
var usingComponentsObj = sourceObj.usingComponents;
var placeHolder = {};
var hasPlaceHolder = false;
value.forEach(function (item) {
// eslint-disable-next-line no-restricted-syntax
for (var compKey in usingComponentsObj) {
var formattedFilePath = formatComponentPath$1(item.filePath);
if (usingComponentsObj[compKey].indexOf(formattedFilePath) > -1) {
placeHolder[compKey] = 'view';
hasPlaceHolder = true;
}
}
});
if (hasPlaceHolder) {
var placeHolderStr = JSON.stringify(placeHolder);
if (sourceCode.includes('componentPlaceholder')) {
sourceObj.componentPlaceholder = _objectSpread$6(_objectSpread$6({}, sourceObj.componentPlaceholder), placeHolder);
asset.source = function () {
return JSON.stringify(sourceObj, null, 2);
};
callback === null || callback === void 0 || callback();
return;
}
asset.source = function () {
return sourceCode.replace(/}$/, ",\"componentPlaceholder\": ".concat(placeHolderStr, "\n}"));
};
}
}
});
}
},
_ret;
for (var _i = 0, _fileNames = fileNames; _i < _fileNames.length; _i++) {
_ret = _loop();
if (_ret === 0) continue;
}
callback === null || callback === void 0 || callback();
});
}
}]);
return AddPlaceHolderPlugin;
}();
function formatComponentPath$1(filePath) {
var reg = /[/]?project\/[^/]+/;
return filePath.replace(reg, '');
}
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
try {
var info = gen[key](arg);
var value = info.value;
} catch (error) {
reject(error);
return;
}
if (info.done) {
resolve(value);
} else {
Promise.resolve(value).then(_next, _throw);
}
}
function _asyncToGenerator(fn) {
return function () {
var self = this,
args = arguments;
return new Promise(function (resolve, reject) {
var gen = fn.apply(self, args);
function _next(value) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
}
function _throw(err) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
}
_next(undefined);
});
};
}
var regeneratorRuntimeExports = {};
var regeneratorRuntime$1 = {
get exports(){ return regeneratorRuntimeExports; },
set exports(v){ regeneratorRuntimeExports = v; },
};
var _typeofExports = {};
var _typeof = {
get exports(){ return _typeofExports; },
set exports(v){ _typeofExports = v; },
};
(function (module) {
function _typeof(o) {
"@babel/helpers - typeof";
return (module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, module.exports.__esModule = true, module.exports["default"] = module.exports), _typeof(o);
}
module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;
} (_typeof));
(function (module) {
var _typeof = _typeofExports["default"];
function _regeneratorRuntime() {
module.exports = _regeneratorRuntime = function _regeneratorRuntime() {
return e;
}, module.exports.__esModule = true, module.exports["default"] = module.exports;
var t,
e = {},
r = Object.prototype,
n = r.hasOwnProperty,
o = Object.defineProperty || function (t, e, r) {
t[e] = r.value;
},
i = "function" == typeof Symbol ? Symbol : {},
a = i.iterator || "@@iterator",
c = i.asyncIterator || "@@asyncIterator",
u = i.toStringTag || "@@toStringTag";
function define(t, e, r) {
return Object.defineProperty(t, e, {
value: r,
enumerable: !0,
configurable: !0,
writable: !0
}), t[e];
}
try {
define({}, "");
} catch (t) {
define = function define(t, e, r) {
return t[e] = r;
};
}
function wrap(t, e, r, n) {
var i = e && e.prototype instanceof Generator ? e : Generator,
a = Object.create(i.prototype),
c = new Context(n || []);
return o(a, "_invoke", {
value: makeInvokeMethod(t, r, c)
}), a;
}
function tryCatch(t, e, r) {
try {
return {
type: "normal",
arg: t.call(e, r)
};
} catch (t) {
return {
type: "throw",
arg: t
};
}
}
e.wrap = wrap;
var h = "suspendedStart",
l = "suspendedYield",
f = "executing",
s = "completed",
y = {};
function Generator() {}
function GeneratorFunction() {}
function GeneratorFunctionPrototype() {}
var p = {};
define(p, a, function () {
return this;
});
var d = Object.getPrototypeOf,
v = d && d(d(values([])));
v && v !== r && n.call(v, a) && (p = v);
var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);
function defineIteratorMethods(t) {
["next", "throw", "return"].forEach(function (e) {
define(t, e, function (t) {
return this._invoke(e, t);
});
});
}
function AsyncIterator(t, e) {
function invoke(r, o, i, a) {
var c = tryCatch(t[r], t, o);
if ("throw" !== c.type) {
var u = c.arg,
h = u.value;
return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) {
invoke("next", t, i, a);
}, function (t) {
invoke("throw", t, i, a);
}) : e.resolve(h).then(function (t) {
u.value = t, i(u);
}, function (t) {
return invoke("throw", t, i, a);
});
}
a(c.arg);
}
var r;
o(this, "_invoke", {
value: function value(t, n) {
function callInvokeWithMethodAndArg() {
return new e(function (e, r) {
invoke(t, n, e, r);
});
}
return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
}
});
}
function makeInvokeMethod(e, r, n) {
var o = h;
return function (i, a) {
if (o === f) throw new Error("Generator is already running");
if (o === s) {
if ("throw" === i) throw a;
return {
value: t,
done: !0
};
}
for (n.method = i, n.arg = a;;) {
var c = n.delegate;
if (c) {
var u = maybeInvokeDelegate(c, n);
if (u) {
if (u === y) continue;
return u;
}
}
if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) {
if (o === h) throw o = s, n.arg;
n.dispatchException(n.arg);
} else "return" === n.method && n.abrupt("return", n.arg);
o = f;
var p = tryCatch(e, r, n);
if ("normal" === p.type) {
if (o = n.done ? s : l, p.arg === y) continue;
return {
value: p.arg,
done: n.done
};
}
"throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg);
}
};
}
function maybeInvokeDelegate(e, r) {
var n = r.method,
o = e.iterator[n];
if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y;
var i = tryCatch(o, e.iterator, r.arg);
if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y;
var a = i.arg;
return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y);
}
function pushTryEntry(t) {
var e = {
tryLoc: t[0]
};
1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);
}
function resetTryEntry(t) {
var e = t.completion || {};
e.type = "normal", delete e.arg, t.completion = e;
}
function Context(t) {
this.tryEntries = [{
tryLoc: "root"
}], t.forEach(pushTryEntry, this), this.reset(!0);
}
function values(e) {
if (e || "" === e) {
var r = e[a];
if (r) return r.call(e);
if ("function" == typeof e.next) return e;
if (!isNaN(e.length)) {
var o = -1,
i = function next() {
for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;
return next.value = t, next.done = !0, next;
};
return i.next = i;
}
}
throw new TypeError(_typeof(e) + " is not iterable");
}
return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", {
value: GeneratorFunctionPrototype,
configurable: !0
}), o(GeneratorFunctionPrototype, "constructor", {
value: GeneratorFunction,
configurable: !0
}), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) {
var e = "function" == typeof t && t.constructor;
return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name));
}, e.mark = function (t) {
return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t;
}, e.awrap = function (t) {
return {
__await: t
};
}, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {
return this;
}), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {
void 0 === i && (i = Promise);
var a = new AsyncIterator(wrap(t, r, n, o), i);
return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {
return t.done ? t.value : a.next();
});
}, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () {
return this;
}), define(g, "toString", function () {
return "[object Generator]";
}), e.keys = function (t) {
var e = Object(t),
r = [];
for (var n in e) r.push(n);
return r.reverse(), function next() {
for (; r.length;) {
var t = r.pop();
if (t in e) return next.value = t, next.done = !1, next;
}
return next.done = !0, next;
};
}, e.values = values, Context.prototype = {
constructor: Context,
reset: function reset(e) {
if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);
},
stop: function stop() {
this.done = !0;
var t = this.tryEntries[0].completion;
if ("throw" === t.type) throw t.arg;
return this.rval;
},
dispatchException: function dispatchException(e) {
if (this.done) throw e;
var r = this;
function handle(n, o) {
return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o;
}
for (var o = this.tryEntries.length - 1; o >= 0; --o) {
var i = this.tryEntries[o],
a = i.completion;
if ("root" === i.tryLoc) return handle("end");
if (i.tryLoc <= this.prev) {
var c = n.call(i, "catchLoc"),
u = n.call(i, "finallyLoc");
if (c && u) {
if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
} else if (c) {
if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
} else {
if (!u) throw new Error("try statement without catch or finally");
if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
}
}
}
},
abrupt: function abrupt(t, e) {
for (var r = this.tryEntries.length - 1; r >= 0; --r) {
var o = this.tryEntries[r];
if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
var i = o;
break;
}
}
i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);
var a = i ? i.completion : {};
return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a);
},
complete: function complete(t, e) {
if ("throw" === t.type) throw t.arg;
return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y;
},
finish: function finish(t) {
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
var r = this.tryEntries[e];
if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;
}
},
"catch": function _catch(t) {
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
var r = this.tryEntries[e];
if (r.tryLoc === t) {
var n = r.completion;
if ("throw" === n.type) {
var o = n.arg;
resetTryEntry(r);
}
return o;
}
}
throw new Error("illegal catch attempt");
},
delegateYield: function delegateYield(e, r, n) {
return this.delegate = {
iterator: values(e),
resultName: r,
nextLoc: n
}, "next" === this.method && (this.arg = t), y;
}
}, e;
}
module.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports["default"] = module.exports;
} (regeneratorRuntime$1));
// TODO(Babel 8): Remove this file.
var runtime = regeneratorRuntimeExports();
var regenerator = runtime;
// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=
try {
regeneratorRuntime = runtime;
} catch (accidentalStrictMode) {
if (typeof globalThis === "object") {
globalThis.regeneratorRuntime = runtime;
} else {
Function("r", "regeneratorRuntime = r")(runtime);
}
}
function _arrayLikeToArray$9(arr, len) {
if (len == null || len > arr.length) len = arr.length;
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
return arr2;
}
function _arrayWithoutHoles(arr) {
if (Array.isArray(arr)) return _arrayLikeToArray$9(arr);
}
function _iterableToArray(iter) {
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
}
function _unsupportedIterableToArray$9(o, minLen) {
if (!o) return;
if (typeof o === "string") return _arrayLikeToArray$9(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(o);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$9(o, minLen);
}
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _toConsumableArray(arr) {
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray$9(arr) || _nonIterableSpread();
}
var ROOT_NAME$1 = 'MAIN';
function saveJsonToLog(content, file) {
var needLog = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
if (!needLog) return;
createLogDir();
var filePath = "./log/".concat(file);
var beforeContent = [];
var newContent = [{
logTime: tComm.timeStampFormat(Date.now(), 'yyyy-MM-dd hh:mm:ss'),
data: content
}];
if (fs__namespace.existsSync(filePath)) {
try {
beforeContent = tComm.readFileSync(filePath, true).logList || [];
} catch (err) {
beforeContent = [];
}
}
if (beforeContent && Array.isArray(beforeContent)) {
var _newContent;
(_newContent = newContent).push.apply(_newContent, _toConsumableArray(beforeContent));
}
newContent = newContent.slice(0, 10);
try {
fs__namespace.writeFile(filePath, JSON.stringify({
logList: newContent
}, null, 2), {
encoding: 'utf-8'
}, function () {});
} catch (err) {}
}
function createLogDir() {
if (!fs__namespace.existsSync('./log')) {
fs__namespace.mkdirSync('./log');
}
}
function updateAssetSource(assets, key, _source) {
assets[key] = {
source: function source() {
return _source;
},
size: function size() {
return _source.length;
}
};
}
function removeFirstSlash(key) {
if (key.startsWith('/')) {
return key.slice(1);
}
return key;
}
function sortStringList(list) {
list.sort(function (a, b) {
if (a > b) return 1;
if (a < b) return -1;
return 0;
});
return list;
}
function parseSetDeps(deps) {
return Object.keys(deps).reduce(function (acc, item) {
acc[item] = Array.from(deps[item]);
sortStringList(acc[item]);
return acc;
}, {});
}
function getRelativePath(filePath) {
return path__namespace.relative(process.cwd(), path__namespace.resolve(filePath));
}
function getUniCliCache(key) {
var cache = require('@dcloudio/uni-cli-shared/lib/cache');
if (!key) return cache;
return cache[key];
}
var DepAnalysisPlugin = /*#__PURE__*/function () {
function DepAnalysisPlugin() {
_classCallCheck(this, DepAnalysisPlugin);
_defineProperty(this, "depsMap", void 0);
_defineProperty(this, "reverseDepsMap", void 0);
_defineProperty(this, "pluginName", void 0);
this.depsMap = {};
this.reverseDepsMap = {};
this.pluginName = 'DepAnalysisPlugin';
createLogDir();
}
_createClass(DepAnalysisPlugin, [{
key: "apply",
value: function apply(compiler) {
var _this = this;
compiler.hooks.normalModuleFactory.tap(this.pluginName, function (nmf) {
nmf.hooks.afterResolve.tap(_this.pluginName, function (result) {
var resourceResolveData = result.resourceResolveData;
var issuer = resourceResolveData.context.issuer,
path = resourceResolveData.path;
var parent = issuer ? getRelativePath(issuer) : ROOT_NAME$1;
var child = getRelativePath(path);
if (_this.depsMap[parent]) {
_this.depsMap[parent].add(child);
} else {
_this.depsMap[parent] = new Set([child]);
}
if (_this.reverseDepsMap[child]) {
_this.reverseDepsMap[child].add(parent);
} else {
_this.reverseDepsMap[child] = new Set([parent]);
}
});
});
compiler.hooks.done.tap(this.pluginName, /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee() {
var deps, reverseDeps, handledDepsMap;
return regenerator.wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
try {
deps = parseSetDeps(_this.depsMap);
reverseDeps = parseSetDeps(_this.reverseDepsMap);
saveJsonToLog(deps, 'analyze-deps.dep.json');
saveJsonToLog(reverseDeps, 'analyze-deps.dep-reverse.json');
handledDepsMap = tComm.getFlattenedDeps(reverseDeps);
saveJsonToLog(handledDepsMap, 'analyze-deps.dep-flatten.json');
} catch (err) {
console.warn('[DepAnalysisPlugin] err: ', err);
}
case 1:
case "end":
return _context.stop();
}
}, _callee);
})));
}
}]);
return DepAnalysisPlugin;
}();
function _createForOfIteratorHelper$8(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$8(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
function _unsupportedIterableToArray$8(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$8(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$8(o, minLen); }
function _arrayLikeToArray$8(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
var TYPE_MAP = {
ObjectExpression: 'ObjectExpression',
ArrayExpression: 'ArrayExpression',
UnaryExpression: 'UnaryExpression',
ObjectProperty: 'ObjectProperty',
ObjectMethod: 'ObjectMethod',
Literal: 'Literal',
StringLiteral: 'StringLiteral',
NumericLiteral: 'NumericLiteral'
};
function checkOneDeclaration(declaration, foundData) {
var init = declaration.init,
id = declaration.id;
var name = id.name;
if (!init) return;
var result = checkElementConstant(init);
if (result) {
var _result = generate__default["default"](declaration, {});
foundData.push({
value: _result.code,
name: name,
start: declaration.start
});
}
}
function parseLongConstant(source) {
var ast = parser__namespace.parse(source, {
sourceType: 'module',
plugins: ['typescript']
});
var foundData = [];
traverse__default["default"](ast, {
VariableDeclaration: function VariableDeclaration(path) {
path.node.declarations.forEach(function (declaration) {
return checkOneDeclaration(declaration, foundData);
});
}
});
return foundData;
}
function checkObjectConstant(node) {
var _iterator = _createForOfIteratorHelper$8(node.properties),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var property = _step.value;
if (property.type === TYPE_MAP.ObjectMethod) {
return false;
}
var temp = checkElementConstant(property.value);
if (!temp) {
return false;
}
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
return true;
}
function checkElementConstant(node) {
var propType = node.type;
// console.log('[checkElementConstant] propType: ', propType);
if (propType === TYPE_MAP.Literal || propType.endsWith(TYPE_MAP.Literal) || propType === TYPE_MAP.UnaryExpression) {
return true;
}
if (propType === TYPE_MAP.ObjectExpression) {
return checkObjectConstant(node);
}
if (propType === TYPE_MAP.ArrayExpression) {
return checkArrayConstant(node);
}
// console.log('[checkElementConstant] unknown type: ', propType);
return false;
}
function checkArrayConstant(node) {
var _iterator2 = _createForOfIteratorHelper$8(node.elements),
_step2;
try {
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
var element = _step2.value;
if (!element) {
continue;
}
var temp = checkElementConstant(element);
if (!temp) {
return false;
}
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
return true;
}
function ownKeys$5(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread$5(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$5(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$5(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _createForOfIteratorHelper$7(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$7(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
function _unsupportedIterableToArray$7(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$7(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$7(o, minLen); }
function _arrayLikeToArray$7(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
var LOG_FILE_NAME = 'long-constant.result';
var THRESHOLD_LIST = [100, 300, 500, 1000, 2000];
function saveData(rawData) {
var _iterator = _createForOfIteratorHelper$7(THRESHOLD_LIST),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var threshold = _step.value;
var result = filterData(rawData, threshold);
saveJsonToLog(result, "".concat(LOG_FILE_NAME, "-").concat(threshold, ".json"));
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
}
function filterData(rawData, threshold) {
return rawData.map(function (item) {
var data = item.data,
file = item.file;
var temp = data.map(function (item) {
return _objectSpread$5(_objectSpread$5({}, item), {}, {
length: item.value.length
});
}).filter(function (it) {
return it.length > threshold;
});
return {
file: file,
data: temp
};
}).filter(function (item) {
return item.data.length;
});
}
var CheckLongConstantPlugin = /*#__PURE__*/function () {
function CheckLongConstantPlugin() {
_classCallCheck(this, CheckLongConstantPlugin);
_defineProperty(this, "pluginName", void 0);
this.pluginName = 'CheckLongConstantPlugin';
createLogDir();
}
_createClass(CheckLongConstantPlugin, [{
key: "apply",
value: function apply(compiler) {
if (process.env.NODE_ENV !== 'production') {
return;
}
compiler.hooks.emit.tap(this.pluginName, function (compilation) {
try {
var assets = compilation.assets;
checkLongConstant(assets);
} catch (err) {
console.warn('[CheckLongConstantPlugin] err', err);
}
});
}
}]);
return CheckLongConstantPlugin;
}();
function checkLongConstant(assets) {
var keys = Object.keys(assets);
var LOG_DATA = [];
for (var _i = 0, _keys = keys; _i < _keys.length; _i++) {
var item = _keys[_i];
if (item.endsWith('.js')) {
var _assets$item$source, _assets$item;
var source = (_assets$item$source = (_assets$item = assets[item]).source) === null || _assets$item$source === void 0 || (_assets$item$source = _assets$item$source.call(_assets$item)) === null || _assets$item$source === void 0 ? void 0 : _assets$item$source.toString();
var result = parseLongConstant(source);
LOG_DATA.push({
file: item,
data: result
});
}
}
saveData(LOG_DATA);
}
var CopyDirPlugin = /*#__PURE__*/function () {
function CopyDirPlugin(options) {
_classCallCheck(this, CopyDirPlugin);
_defineProperty(this, "options", void 0);
this.options = options;
}
_createClass(CopyDirPlugin, [{
key: "apply",
value: function apply(compiler) {
var _this = this;
// 编译后处理
compiler.hooks.done.tap('CopyDirPlugin', function () {
_this.move();
});
}
}, {
key: "move",
value: function move() {
// @ts-ignore
var _ref = this.options || {},
_ref$dirs = _ref.dirs,
dirs = _ref$dirs === void 0 ? [] : _ref$dirs;
dirs.forEach(function (dir) {
if (dir.from && dir.to) {
var result = dir.type === 'mv' ? childProcess__namespace.spawnSync('mv', ['-f', dir.from, dir.to]) : childProcess__namespace.spawnSync('cp', ['-rf', dir.from, dir.to]);
if (result.error) {
console.warn(result.error);
}
}
});
}
}]);
return CopyDirPlugin;
}();
function ownKeys$4(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
// e.__uniConfig.__webpack_chunk_load__=n.e,t["default"]
function extractAsyncChunks(source) {
// const reg = new RegExp('_webpack_require__.e\\("(.*?)"\\)', 'g');
if (source.includes('Promise.all')) {
source = source.replace(/^Promise.all\(\[/, '').replace(/\]\)$/, '');
}
var reg = new RegExp('\\w.\\w\\("(.*?)"\\)', 'g');
var chunks = [];
var match = reg.exec(source);
while (match) {
chunks.push(match[1]);
match = reg.exec(source);
}
return chunks;
}
// eslint-disable-next-line max-len
// const a = 'e.__uniConfig.__webpack_chunk_load__=n.e,t["default"].component("views-home-hor-index",(function(e){var t={component:Promise.all([n.e("default~views-home-hor-index~views-owner-ingame-match-game-list-game-list"),n.e("views-home-hor-index")]).then(function(){return e(n("a772"))}.bind(null,n)).catch(n.oe),delay:__uniConfig["async"].delay,timeout:__uniConfig["async"].timeout};return __uniConfig["async"]["loading"]&&(t.loading={name:"SystemAsyncLoading",render:function(e){return e(__uniConfig["async"]["loading"])}}),__uniConfig["async"]["error"]&&(t.error={name:"SystemAsyncError",render:function(e){return e(__uniConfig["async"]["error"])}}),t})),t["default"].component("views-owner-ingame-match-team-zone-team-zone",(function(e){var t={component:Promise.all([n.e("chunk-2d401669"),n.e("default~views-owner-ingame-match-ai-room-ai-room~views-owner-ingame-match-league-room-league-room~vi~fde6b837"),';
function extractComponentDeps(source) {
source = source.replace(/\s/g, '').replace(/\.default\.component/g, '["default"].component');
// eslint-disable-next-line max-len
// const reg = new RegExp('vue__WEBPACK_IMPORTED_MODULE_4__\\["default"\\].component\\(\'(.*?)\', function \\(resolve\\)\\s+{\\s+var component = {\\s+component: Promise.all\\(([\\s\\S]*)\\[(.*?)\\]\\).then', 'g');
var reg = new RegExp('\\w\\["default"\\].component\\([\'|"]([\\w-]+)[\'|"],\\(function\\(\\w\\){var\\w={component:(.*?).then', 'g');
var eventList = [];
var match = reg.exec(source);
while (match) {
var chunks = extractAsyncChunks(match[2]);
eventList.push({
name: match[1],
chunks: chunks
});
match = reg.exec(source);
}
saveJsonToLog(eventList, 'custom-preload.event-list.json');
return eventList;
}
function extractUniRoutes(source) {
var _source$match;
var reg = /__uniRoutes=\[([\s\S]+)\],/;
var inner = ((_source$match = source.match(reg)) === null || _source$match === void 0 ? void 0 : _source$match[1]) || '';
var compReg = /path:"([^"']+)".*?meta:\{.*?name:"([^"']+)".*?pagePath:"([^"']+)"/g;
var componentList = [];
var match = compReg.exec(inner);
while (match) {
componentList.push({
path: match[1],
name: match[2],
pagePath: match[3]
});
match = compReg.exec(inner);
}
saveJsonToLog(componentList, 'custom-preload.component-list.json');
return componentList;
}
function flatComponentList(list) {
return list.reduce(function (acc, item) {
return _objectSpread$4(_objectSpread$4({}, acc), {}, _defineProperty({}, item.path, item.name));
}, {});
}
function stringifyJson(json) {
return JSON.stringify(json, function (k, v) {
// 将正则对象转换为正则字符串
if (v instanceof RegExp) {
return v.toString();
}
return v;
});
}
function paresPreloadOptions(options, uniRoutes) {
var formattedOptions = formatPreloadOptions(options);
var parsed = getPageBundle(formattedOptions, uniRoutes);
return parsed;
}
function formatPreloadOptions(options) {
var delay = 0;
var interval = 1000;
if (!options) {
return [];
}
var result = options.map(function (option) {
if (Array.isArray(option.pages)) {
var pages = (option.pages || []).map(function (page, index) {
if (Array.isArray(page)) {
return {
page: page,
delay: index * interval + delay
};
}
return {
page: [page],
delay: index * interval + delay
};
});
return _objectSpread$4(_objectSpread$4({}, option), {}, {
pages: pages
});
}
if (!option.pages) {
return _objectSpread$4(_objectSpread$4({}, option), {}, {
pages: []
});
}
return _objectSpread$4(_objectSpread$4({}, option), {}, {
pages: [{
page: [option.pages],
delay: delay
}]
});
});
return result;
}
function getPageBundle(options, uniRoutes) {
var routesMap = flatComponentList(uniRoutes);
return options.map(function (item) {
var pages = item.pages,
condition = item.condition;
var parsedPages = (pages || []).reduce(function (acc, item) {
acc.push.apply(acc, _toConsumableArray(item.page));
return acc;
}, []);
console.log('[parsedPages]', parsedPages);
var curBundle;
var key = (condition === null || condition === void 0 ? void 0 : condition.hash) || (condition === null || condition === void 0 ? void 0 : condition.path);
if (Array.isArray(key)) {
var temp = key.find(function (itemKey) {
return !!routesMap[itemKey];
});
if (temp) {
curBundle = routesMap[temp];
}
}
if (key && typeof key === 'string') {
curBundle = routesMap[key];
}
console.log('[curBundle],', curBundle, key);
if (curBundle && !parsedPages.includes(curBundle)) {
return _objectSpread$4(_objectSpread$4({}, item), {}, {
pages: [{
page: [curBundle],
delay: 0
}].concat(_toConsumableArray(pages || []))
});
}
return item;
});
}
var CustomPreloadPlugin = /*#__PURE__*/function () {
function CustomPreloadPlugin(options) {
_classCallCheck(this, CustomPreloadPlugin);
_defineProperty(this, "pluginName", 'CustomPreloadPlugin');
_defineProperty(this, "moduleList", []);
_defineProperty(this, "mainChunkFileName", 'index.js');
_defineProperty(this, "pageChunkList", []);
_defineProperty(this, "uniRoutes", []);
_defineProperty(this, "customPreloadOptions", {});
if (Array.isArray(options.list)) {
this.customPreloadOptions = options;
}
}
_createClass(CustomPreloadPlugin, [{
key: "apply",
value: function apply(compiler) {
var _this$customPreloadOp,
_this = this;
if (!((_this$customPreloadOp = this.customPreloadOptions.list) !== null && _this$customPreloadOp !== void 0 && _this$customPreloadOp.length)) {
return;
}
compiler.hooks.compilation.tap(this.pluginName, function (compilation) {
compilation.hooks.chunkAsset.tap(_this.pluginName, function (chunk, filename) {
if (chunk.name === 'index') {
_this.mainChunkFileName = filename;
}
});
});
compiler.hooks.emit.tap(this.pluginName, function (compilation) {
var assets = compilation.assets;
var mainChunkFile = assets[_this.mainChunkFileName];
var source = mainChunkFile.source();
var pageChunkList = extractComponentDeps(source);
_this.uniRoutes = extractUniRoutes(source);
_this.pageChunkList = pageChunkList;
var insertCode = _this.getAllPreloadScripts();
_this.updateHtml(compilation, insertCode);
});
}
}, {
key: "getAllPreloadScripts",
value: function getAllPreloadScripts() {
var parsedOptions = paresPreloadOptions(this.customPreloadOptions.list, this.uniRoutes);
var preloadPageList = parsedOptions === null || parsedOptions === void 0 ? void 0 : parsedOptions.reduce(function (acc, item) {
acc.push.apply(acc, _toConsumableArray((item.pages || []).reduce(function (ac, it) {
ac.push.apply(ac, _toConsumableArray(it.page));
return ac;
}, [])));
return acc;
}, []);
saveJsonToLog(preloadPageList, 'custom-preload.preload-page-list.json');
var chunkMap = this.pageChunkList.filter(function (item) {
return preloadPageList === null || preloadPageList === void 0 ? void 0 : preloadPageList.includes(item.name);
}).reduce(function (acc, item) {
acc[item.name] = item.chunks;
return acc;
}, {});
if (!Object.keys(chunkMap).length) {
return '';
}
// var chunkMap = {
// 'views-match-match-detail-index': [ 'chunk-49f54b64', 'chunk-17956c4c', 'views-match-match-detail-index'],
// 'views-match-match-detail-match-detail': [ 'chunk-49da847a', 'views-match-match-detail-match-detail'],
// 'views-other-album-event-theme': [ 'chunk-49f54b64', 'views-other-album-event-theme'],
// 'views-battle-room-room-quick': [ 'chunk-49da847a', 'views-battle-room-room-quick'],
// };
var insertCode = "<script>(function(){var chunkMap = ".concat(JSON.stringify(chunkMap), ";var preloadList = ").concat(stringifyJson(parsedOptions || []), ";var hash = window.location.hash;\nmain();\nfunction main() {\n setTimeout(() => {\n try {\n load();\n } catch(err) {}\n },10);\n}\nfunction load() {\n for(var i = 0; i< preloadList.length;i++){\n var item = preloadList[i];\n var hash = item.condition && item.condition.hash;\n var conditionPath = item.condition && item.condition.path;\n var evalHash = '';\n try {\n evalHash = eval(hash);\n } catch(err) {}\n if (hash) {\n if ((typeof hash === 'string' && location.hash === hash) || (\n typeof evalHash === 'object' && evalHash.test && evalHash.test(location.hash)\n ) || (Object.prototype.toString.call(hash) === '[object Array]' && hash.indexOf(location.hash) > -1 )) {\n loadScript(item.pages);\n break;\n }\n }\n\n if (conditionPath && location.pathname) {\n var currentPath = '/' + location.pathname.split('/').slice(2).join('/');\n\n if ((typeof conditionPath === 'string' && conditionPath === currentPath) || (\n Object.prototype.toString.call(conditionPath) === '[object Array]' && conditionPath.indexOf(currentPath) > -1)\n ) {\n loadScript(item.pages);\n break;\n }\n }\n }\n}\nfunction getPageChunks(pages) {\n var result = [];\n for (var i = 0; i< pages.length;i++) {\n result = result.concat(chunkMap[pages[i] || []]);\n }\n return result;\n}\nfunction loadScript(pages) {\n var scripts = [];\n for (var i =0;i<pages.length;i++) {\n var page = pages[i];\n var script = getPageChunks(page.page || []);\n if (script && script.length) {\n scripts = scripts.concat({\n script: script,\n delay: page.delay,\n });\n }\n }\n for (var j = 0; j < scripts.length; j++) {\n (function (j) {\n setTimeout(() => {\n batchLoadScript(scripts[j].script);\n }, scripts[j].delay || 0);\n })(j);\n }\n}\nfunction batchLoadScript(scripts) {\n for (var i = 0; i < scripts.length; i++) {\n realLoadScript(scripts[i]);\n }\n}\nfunction realLoadScript(target) {\n if (!target) { return; }\n var src = window.jsonpScriptSrc && window.jsonpScriptSrc(target);\n\n if (!src || src.indexOf('.undefined.js') > -1) { return; }\n var head = document.querySelector('head');\n if (!head) { return; }\n var newScript = document.createElement('script');\n newScript.type = 'text/javascript';\n newScript.src = src;\n\n head.appendChild(newScript);\n}\n})()</script>");
return insertCode;
}
}, {
key: "updateHtml",
value: function updateHtml(compilation, insertCode) {
var assets = compilation.assets;
var key = 'index.html';
if (!assets[key] || !insertCode) return;
var source = assets[key].source().toString();
var idx = source.lastIndexOf('</head>');
var newSource = source.slice(0, idx) + insertCode + source.slice(idx);
updateAssetSource(assets, key, newSource);
}
}]);
return CustomPreloadPlugin;
}();
// [
// {
// condition: '#/',
// pages: ['views-home-hor-index'],
// },
// ];
function realTraverse(parent, deps, result, child) {
for (var _i = 0, _arr = _toConsumableArray(parent); _i < _arr.length; _i++) {
var key = _arr[_i];
if (result.indexOf(key) > -1) {
continue;
}
result.push(key);
var before = deps[key];
if (before) {
before = before.filter(function (ancestor) {
return ancestor !== child && parent.indexOf(ancestor) <= -1;
});
realTraverse(before, deps, result, child);
}
}
}
function excludeSubPackagePages(_ref) {
var deps = _ref.deps,
pages = _ref.pages,
mainPath = _ref.mainPath;
return Object.keys(deps).reduce(function (acc, key) {
var isPage = pages.find(function (item) {
return key.startsWith(item);
});
if (isPage) {
acc[key] = deps[key].filter(function (item) {
return item !== mainPath;
});
} else {
acc[key] = deps[key];
}
//