返回
手把手构建一个脚手架(下)
前端
2024-02-02 12:28:48
工作流梳理
通过上节内容我们已经拿到了即将要创建的组件配置项,接下来我们的一个工作流大概如下:
Step1 获取组件目录
获取组件目录是我们需要做的第一步,它决定我们生成的文件位置在哪儿。
我们可以通过读取命令行参数获取组件目录,具体代码如下:
const componentName = process.argv[3];
Step2 确定组件名称
当我们拿到组件名称之后,我们需要对其进行一个格式化处理,以便于统一组件的命名规范,让后续工作更加简单。
Step3 组件目录创建
创建组件目录也是一个非常重要的步骤,因为它关系到我们组件的最终位置,具体代码如下:
fs.mkdirSync(path.join(directory, componentName));
Step4 脚手架模板渲染
拿到组件目录之后,我们就可以将脚手架模板渲染到该目录下了。
Step5 完成提示
完成了组件的生成之后,我们可以给用户一些提示信息,比如组件的生成路径等。
封装渲染方法
接下来我们需要封装一个渲染方法,这个方法将作为整个脚手架的核心,负责将模板渲染到指定目录。具体代码如下:
/**
* 文件渲染函数
*/
const renderTemplateFile = (source, dest, data) => {
if (!fs.existsSync(source)) {
throw new Error(`Template file ${source} does not exist.`);
}
const template = fs.readFileSync(source, "utf8");
const output = ejs.render(template, data);
fs.writeFileSync(dest, output, "utf8");
};
这个方法接受三个参数,分别是模板文件的路径、目标文件的路径和数据对象。它首先检查模板文件是否存在,如果不存在,就会抛出一个错误。然后它读取模板文件的内容并使用 EJS 渲染模板,最后将渲染后的内容写入目标文件。
模板文件渲染
完成了渲染方法之后,我们就可以开始渲染模板文件了。在脚手架中,我们定义了三个模板文件:
component.ejs
:组件的主文件component.spec.ejs
:组件的测试文件component.stories.ejs
:组件的故事书文件
在上一篇文章中我们已经生成了这些模板文件,这里我们就直接使用它们。
我们使用封装的渲染方法将这些模板文件渲染到组件目录中,具体代码如下:
renderTemplateFile(componentTemplate, path.join(directory, componentName, `${componentName}.vue`), { componentName });
renderTemplateFile(componentSpecTemplate, path.join(directory, componentName, `${componentName}.spec.js`), { componentName });
renderTemplateFile(componentStoriesTemplate, path.join(directory, componentName, `${componentName}.stories.js`), { componentName });
完成提示
完成了组件的生成之后,我们可以给用户一些提示信息,比如组件的生成路径等。具体代码如下:
console.log(`Component ${componentName} created successfully at ${directory}`);
总结
至此,我们就完成了整个脚手架的构建。在本文中,我们学习了如何封装渲染方法、如何渲染模板文件以及如何给用户一些提示信息。