利用fs-extra实现"yarn create tlist"创建项目
我正在参加「掘金·启航计划」
1. 前言
大家好,我是小鑫同学。一位从事过Android开发、混合开发,现在长期从事前端开发的编程爱好者,我觉得在编程之路上最重要的是知识的分享,所谓三人行必有我师。所以我开始在社区持续输出我所了解到、学习到、工作中遇到的各种编程知识,欢迎有想法、有同感的伙伴加我fe-xiaoxin微信交流~
这一篇我们翻版一下 create-vite
,将以后整理的项目模板集中管理,方便在需要的时候快速创建使用~
2. 利用fs-extra实现"yarn create tlist"创建项目
资源拷贝我们采用fs-extra
模块实现~
2.1 模板资源拷贝:
在模板资源拷贝时部分文件是需要我们特殊处理的,所以这部分文件在资源拷贝时就暂时过滤掉,fs-extra
模块中的copySync
就提供了过滤文件的功能~
路径匹配的时候我们可以使用path
模块中的parse
函数转为对象后可以更好的操作~
export const fileIgnore = ['package.json', '_gitignore']; fsExtra.copySync(templateDir, targetDir, { filter: (src, dest) => { return !fileIgnore.find( (f) => f === `${path.parse(src).name}${path.parse(src).ext}` ); }, });
2.2 文本文件拷贝:
_gitignore
文件需要再输出时进行重命名操作,但没有找到可以直接实现重命名的函数,所以就通过分别读写两步实现。普通文本文件使用fs-extra
模块中的readFileSync
读取,在输出到新文件名的文件中~
const gitignoreInfo = fsExtra.readFileSync( path.resolve(templateDir, "_gitignore") ); fsExtra.outputFile(path.join(root, ".gitignore"), gitignoreInfo);
2.3 JSON 文件拷贝:
package.json
读取后我们需要重写内容后再输出,fs-extra
模块中的readJsonSync
函数可以直接读取为 JSON 对象,我们在修改对象后再次通过outputJSONSync
输出 JSON 对象即可,在outputJSONSync
提供的选项中指定spaces=2
输出非在一行的 JSON 文件~
const pkg = fsExtra.readJsonSync(path.resolve(templateDir, "package.json")); pkg.name = packageName || getProjectName(); fsExtra.outputJSONSync(path.join(root, "package.json"), pkg, { spaces: 2, });
3. 总结
"yarn create tlist"的主要逻辑除去参数的收集以外就是模板的拷贝两块了,这里通过利用fs-extra
实现了模板拷贝,fs-extra
函数的支持还是挺不错的,拷贝文件还考虑到了支持过滤的功能,挺不错~
本文项目已推送至GitHub,欢迎克隆演示:
git clone git@github.com:OSpoon/create-tlist.git
如果看完觉得有收获,欢迎点赞、评论、分享支持一下。你的支持和肯定,是我坚持写作的动力~
最后可以关注我@小鑫同学。欢迎点此扫码加我微信fe-xiaoxin交流,共同进步(还可以帮你fix🐛)~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)