实现代码
function envReplace(templateStrings, ...values) {
let result = '';
for (let i = 0; i < templateStrings.length; i++) {
result += templateStrings[i];
if (i < values.length) {
result += process.env[values[i]] || '';
}
}
return result;
}
// 使用示例
const template = envReplace`Hello, ${'USERNAME'}. Your path is ${'PATH'}.`;
console.log(template);
原理解释
- 模板标签的基本形式:
- 模板标签是一种函数调用的语法糖,其形式为
tagFunction
`template string with ${placeholders}`。
- 其中
tagFunction
是自定义的函数,在上述代码中为envReplace
。template string with ${placeholders}
是普通的模板字符串,其中包含占位符${}
。
- 参数传递:
- 模板标签调用时,
tagFunction
的第一个参数是一个数组,包含模板字符串中除占位符外的部分。例如在envReplace
`Hello, ${'USERNAME'}. Your path is ${'PATH'}.中,
templateStrings数组的值为
['Hello, ', '. Your path is ', '.']`。
tagFunction
的其余参数是模板字符串中占位符表达式的值。在上述例子中,values
数组的值为['USERNAME', 'PATH']
。
- 处理逻辑:
- 在
envReplace
函数中,通过遍历templateStrings
数组,将其中的字符串片段和对应占位符替换后的值依次拼接起来。
- 对于占位符,尝试从
process.env
(Node.js 环境变量对象)中获取对应的值,如果不存在则使用空字符串。最后返回处理后的完整字符串。