UNPKG

plugin-light

Version:

Webpack 相关插件、Loader、基础配置及 CLI 命令

72 lines (66 loc) 2.04 kB
'use strict'; var loaderUtils = require('loader-utils'); var PLATFORM_MAP = { MP_WX: 'mp-weixin', MP_QQ: 'mp-qq', MP_ALIPAY: 'mp-alipay', H5: 'h5' }; var CSS_MAP = { MP_WX: '.wxss', MP_QQ: '.qss', MP_ALIPAY: '.acss', MP_JD: '.jxss' }; // TODO: 类型补充 Object.keys(CSS_MAP).reduce(function (acc, item) { acc[item] = CSS_MAP[item].slice(1); return acc; }, {}); var ALL_PLATFORM = 'ALL'; function shouldUseLoader() { var defaultPlatforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var options = loaderUtils.getOptions(this) || {}; var _options$platforms = options.platforms, platforms = _options$platforms === void 0 ? defaultPlatforms : _options$platforms; var platform = process.env.UNI_PLATFORM || ''; if (platforms === ALL_PLATFORM || platforms.indexOf(ALL_PLATFORM) > -1) { return true; } return platforms.includes(platform); } var PLATFORMS_MP = [PLATFORM_MAP.MP_WX, PLATFORM_MAP.MP_QQ]; /** * 替换vue文件key的表示,以解决转换报错 * 比如将 :key="'type' + index" 转为 :key="type-${index}" * @example * ```ts * const testA = ':key="\'templateList\' + index "'; transformKey(testA); const testB = ':key="index + \'templateList\'"'; transformKey(testB); const testC = ' :key="memberIndex + \'blueindex\' "'; transformKey(testC); * ``` */ function transformKey(source) { if (!shouldUseLoader.call(this, PLATFORMS_MP)) return source; var re = /:key="'(\w+)'\s*\+\s*(\w+)\s*"/g; var reBack = /:key="(\w+)\s*\+\s*'(\w+)'\s*"/g; if (re.test(source)) { return source.replace(re, function (a, b, c) { var realKey = "`".concat(b, "-${").concat(c, "}`"); var res = ":key=\"".concat(realKey, "\""); return res; }); } if (reBack.test(source)) { return source.replace(reBack, function (a, b, c) { var realKey = "`".concat(c, "-${").concat(b, "}`"); var res = ":key=\"".concat(realKey, "\""); return res; }); } return source; } module.exports = transformKey;