利用node.js实现自动生成前端项目组件的方法详解
发布时间 - 2026-01-11 02:18:18 点击率:次本文主要给大家介绍了关于利用node.js实现自动生成前端项目组件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:

脚本编写背景
写这个小脚本的初衷是,项目本身添加一个组件太繁琐了,比如我想要去建立一个login的组件,那么我需要手动去IDE中,创建index.js(组件出口文件),login.js(业务文件),login.html,login.less这四个文件。因为每个组件都有一些输出的代码,还要把之前组件的那几行拷贝过来,这种作业真的烦,于是乎写了一个小脚本去自动完成这些功能。
PS:本脚本运行环境是nodeV7以上,当前时间2017/07,stable版本还是V6,最新的node版本为V8.1.3(LTS版本),如要运行,请升级node版本为LTS版本。
预期效果
在命令行输入:node set login
在conponents文件夹下面自动生成4个文件,并填写index.js , login.js的文件公共内容。
如果输入多层文件如: node set login/foo
则会先检测conponents文件夹下是否存在login,如不存在,先创建login文件夹,然后创建foo的组件。本脚本主要使用nodejs的fs模块来完成需求。
fs模块
fs模块用于对系统文件及目录进行读写操作,本次主要用到的fs模块的功能有:
fs.existsSync(path)检测文件夹是否存在,一个同步的API,只接受一个路径参数,当前版本异步的废弃了。fs.mkdir(path,callback)创建文件夹,异步,两个必填参数,路径和回掉。fs.readFileSync(path)读取文件,接受一个参数,文件路径。fs.writeFile(path,data,callback)写文件,接受三个参数,文件路径,向文件中写的数据,回掉。
代码实施
流程图
async function creatCpt() {
try {
await exists(); // 检测文件夹
await readFile(); // 读取模板内容
await writeFile(await readFile()); //写入组件
}
catch (err) {
console.error(err);
}
}
获取命令行参数
以node set login为例,想要创建一个login文件夹,首先先要获取命令行当中的login。在nodejs当中,获取命令行参数使用process.argv这条命令返回一个数组,第一个参数为nodejs.exe的应用所在绝对路径,第二个参数为当前脚本所在的绝对路径,之后所输入的参数以空格分隔,如输入node set aaa,得到:
检测文件夹是否存在
let exists = function () {
return new Promise((res) => {
(async function () {
for (let a of path) {
fs.existsSync(basepath + a) ? basepath = `${basepath}${a}/` : await mkdir(a);
}
res(basepath);
})()
})
}
判断是否存在文件夹,如果存在,重新拼接路径继续检查,如不存在则生成文件夹。
创建文件夹
node set foo/bar
let mkdir = function (a) {
return new Promise((res, rej) => {
fs.mkdir(basepath + a, (err) => {
if (err) rej(err);
basepath = `${basepath}${a}/`
res(basepath);
});
})
}
创建文件夹成功后,重新拼接路径,以便于继续查找。
读取模板内容
let reads = [`${basepath}cptTemp/index.js`, `${basepath}cptTemp/cptTemp.js`];//要读取的文件
let readFile = function () {
return new Promise((res) => {
for (let a of reads) {
let text = fs.readFileSync(a).toString();
text = text.replace(/time/g, moment().format('YYYY/MM/DD'))
.replace(/temp/g, name);
file.push(text)
}
res(file);
})
}
每个生成好的文件都需要一个创建的时间,及作者,包括文件的输出,以及class等结构,这些都是比较公用的,把他们写在模板当中,然后读取出来,替换其中的关键词,如时间,组件名等。
生成文件并写入内容
提前建立好要生成的文件和要读取的文件。如:
let writes = [`${name}.js`, `${name}.html`, `${name}.less`, `index.js`];
let writeFile = function (file) {
return new Promise((res, rej) => {
(async function () {
for (let a of writes) {
await fs.writeFile(`${basepath}${a}`,
a == writes[3] ? file[0] : a == writes[0] ? file[1] : '', (err) => {
if (err) rej(err)
})
}
res('succ');
})()
})
}
目前只写了2个要读取的模板,在生成文件之后,会将模板中的内容填充进去。
总结
以上就完成了一个自动生成前端项目组件的小脚本了,当然,还可以继续扩充,比如这些组件其实还需要再到,组件管理的那个js中去注入,这些都可以用脚本完成,本文就到这里为止了。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
项目地址:https://github.com/jiwenjiang...
本地下载地址:http://xiazai./201707/yuanma/angularSeed().rar
# nodejs
# 自动生成代码
# nodejs组件
# 前端项目结构
# node.js express中app.param的用法详解
# Node.js中流(stream)的使用方法示例
# mac上node.js环境的安装测试
# Express + Node.js实现登录拦截器的实例代码
# 基于node.js制作简单爬虫教程
# node.js中grunt和gulp的区别详解
# 关键词
# 命令行
# 自动生成
# 是否存在
# 写了
# 如不
# 我想
# 都有
# 运行环境
# 好了
# 相关内容
# 本地下载
# 还可以
# 第一个
# 说了
# 可以用
# 不多
# 要去
# 要把
# 这条
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
JavaScript如何实现音频处理_Web Audio API如何工作?
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
奇安信“盘古石”团队突破 iOS 26.1 提权
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
浅析上传头像示例及其注意事项
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
如何挑选高效建站主机与优质域名?
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
Laravel如何发送系统通知?(Notification渠道示例)
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
Linux系统运维自动化项目教程_Ansible批量管理实战
如何在腾讯云免费申请建站?
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
如何快速上传自定义模板至建站之星?
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
如何快速辨别茅台真假?关键步骤解析
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
如何在宝塔面板创建新站点?
Laravel如何处理表单验证?(Requests代码示例)
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
Laravel如何处理CORS跨域请求?(配置示例)
大型企业网站制作流程,做网站需要注册公司吗?
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
海南网站制作公司有哪些,海口网是哪家的?
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
java ZXing生成二维码及条码实例分享
如何快速搭建高效可靠的建站解决方案?
如何在七牛云存储上搭建网站并设置自定义域名?
如何获取上海专业网站定制建站电话?
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
网站制作报价单模板图片,小松挖机官方网站报价?
制作电商网页,电商供应链怎么做?
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
如何快速搭建个人网站并优化SEO?
如何为不同团队 ID 动态生成多个独立按钮
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
如何批量查询域名的建站时间记录?
如何快速重置建站主机并恢复默认配置?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
上一篇:进程池设计
上一篇:进程池设计

