diff --git a/lib/config.js b/lib/config.js index b4f70e82528..13d805bac34 100644 --- a/lib/config.js +++ b/lib/config.js @@ -102,50 +102,47 @@ export const siteConfig = (key, defaultVal = null, extendConfig = {}) => { * @returns */ export const convertVal = val => { - // 如果传入参数本身就是obj、数组、boolean 就无需处理 + // 如果传入参数本身就是 obj、数组、boolean,就无需处理 if (typeof val !== 'string' || !val) { return val } - // 解析数字,parseInt将字符串转换为数字 + // 检测是否数字并避免数值溢出 if (/^\d+$/.test(val)) { - return parseInt(val) + const parsedNum = Number(val) + // 如果数值大于 JavaScript 最大安全整数,则作为字符串返回 + if (parsedNum > Number.MAX_SAFE_INTEGER) { + return val + '' + } + return parsedNum } - // 检测是否url - if (isUrl(val)) { - return val - } - // 检测是否url + // 检测是否为布尔值 if (val === 'true' || val === 'false') { return JSON.parse(val) } + // 检测是否为 URL + if (isUrl(val)) { + return val + } + // 配置值前可能有污染的空格 if (val.indexOf('[') < 0 && val.indexOf('{') < 0) { return val } - // 转换 [] , {} , true/false 这类字符串为对象 + // 转换 [] , {} 这类字符串为对象 try { - // 尝试解析json const parsedJson = JSON.parse(val) if (parsedJson !== null) { return parsedJson } } catch (error) { - // try { - // // 尝试解析对象,对象解析能力不如上一步的json - // const evalObj = eval('(' + val + ')') - // if (evalObj !== null) { - // return evalObj - // } - // } catch (error) { - // // Ojbject 解析失败,返回原始字符串值 - // return val - // } + // 解析失败,返回原始字符串 return val } + return val }