uni-plugin-light
Version:
uni-app相关插件、loader及webpack基础配置
60 lines (54 loc) • 1.79 kB
JavaScript
;
var loaderUtils = require('loader-utils');
var PLATFORM_MAP = {
MP_WX: 'mp-weixin',
MP_QQ: 'mp-qq',
H5: 'h5'
};
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;