node js 递归生成vue文件目录

news2024/10/7 10:19:19

目录

什么是 fs 文件系统模块

fs.existsSync方法 

方法说明:

语法:

向指定的文件中写入内容  writeFile

 fs.writeFile() 的语法格式 

 fs.writeFile() 的示例代码

判断文件是否写入成功

 fs.mkdir 创建目录

 目录已存在,重复创建

创建的目录是多级的,

什么是 path 路径模块

路径拼接 join

 path.join() 的语法格式

path.join() 的代码示例

path.dirname() 路径的目录名称

 用法

例子


这段代码是一个用于创建目录的函数。它的作用是检查指定的目录是否存在,如果存在则调用回调函数,如果不存在则递归调用自身来创建父目录。

当找到存在的父目录后,代码使用fs.mkdir函数创建指定的目录。如果创建成功,则打印一条成功的提示信息。如果指定了label参数,则将label的内容写入dirname/index.vue文件中。

整个过程中,代码使用了一些Node.js的文件系统模块(fs)和路径模块(path)来进行文件和目录的操作。

const fs = require("fs");
const path = require("path");

const menuList = [
  {
    label: "审批管理",
    path: "approval",
  },
  {
    label: "考勤管理",
    path: "attendance",
  },
  {
    label: "组织架构",
    path: "department",
  },
  {
    label: "员工管理",
    path: "employee",
  },
  {
    label: "权限管理",
    path: "permission",
  },
  {
    label: "角色管理",
    path: "role",
  },
  {
    label: "工资管理",
    path: "salary",
  },
  {
    label: "社保管理",
    path: "social",
  },
];

/**
 * 递归创建目录
 * @param {string} dirname 目录名
 * @param {function} callback 回调函数
 * @param {string} label 标签
 * @param {boolean} verbose 是否输出日志
 */
//
function mkdirs(dirname, callback, label, verbose = true) {
  // 检查目录是否存在
  if (fs.existsSync(dirname)) {
    callback && callback(); // 调用回调函数
  } else {
    // 递归调用mkdirs函数,创建父目录
    mkdirs(
      path.dirname(dirname),
      function () {
        fs.mkdir(dirname, function (err) {
          if (err) {
            throw err;
          }
          if (verbose) {
            console.log(`创建目录 ${dirname} 成功`);
          }
          // 如果存在label参数,则将label内容写入dirname/index.vue文件中
          if (label) {
            const basString = `<template>
                                <div>
                                ${label}
                                </div>
                            </template>

                            <script>
                            export default {

                            }
                            </script>

                            <style lang="scss" scoped>

                            </style>`;
            /**
             * 参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径。
               参数2:必选参数,表示要写入的内容。
               参数3:可选参数,表示以什么格式写入文件内容,默认值是 utf8。
               参数4:必选参数,文件写入完成后的回调函数。
             */
            fs.writeFile(
              // path.join(dirname, "index.vue") 是用于拼接路径的函数,将 dirname 和 "index.vue" 连接起来,形成文件的完整路径。
              path.join(dirname, "index.vue"),
              // basString 是要写入文件的内容
              basString,
              // { flag: "a" } 是一个选项对象,其中 flag 属性设置为 "a",表示以追加模式写入文件,即在已有内容的末尾添加新内容。
              { flag: "a" },
              // function (err) { } ... 是一个回调函数,用于处理写入文件时可能发生的错误。
              function (err) {
                if (err) {
                  throw err;
                }
                if (verbose) {
                  console.log(`在 ${dirname} 目录下创建 index.vue 文件成功`);
                }
              }
            );
          }
        });
      },
      label,
      verbose
    );
  }
}

menuList.forEach((item) => {
  mkdirs(
    path.join(__dirname, "../views", item.path),
    () => {
      console.log("done");
    },
    item.label
  );
  if (item.children) {
    item.children.forEach((child) => {
      mkdirs(
        path.join(__dirname, "../views", child.path),
        () => {
          console.log("done");
        },
        child.label
      );
    });
  }
});

什么是 fs 文件系统模块

fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。

例如:

fs.writeFile() 方法,用来向指定的文件中写入内容

如果要在 JavaScript 代码中,使用 fs 模块来操作文件,则需要使用如下的方式先导入它:


fs.existsSync方法 

方法说明:

  以同步的方法检测目录是否存在。

  如果目录存在 返回 true ,如果目录不存在 返回false

语法:

fs.existsSync(pach);
由于该方法属于fs模块,使用前需要引入fs模块 var fs = require('fs');

接收参数:(path:将检测的目录路径)

var fs = require("fs");
var checkDir = fs.existsSync("checkDir");
console.log(checkDir);

向指定的文件中写入内容  writeFile

 fs.writeFile() 的语法格式 

使用 fs.writeFile() 方法,可以向指定的文件中写入内容,语法格式如下:

参数解读:

参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径。
参数2:必选参数,表示要写入的内容。
参数3:可选参数,表示以什么格式写入文件内容,默认值是 utf8。
参数4:必选参数,文件写入完成后的回调函数。

 fs.writeFile() 的示例代码

向指定的文件路径中,写入文件内容:

//1、导入fs文件系统模块
const fs = require('fs')
//2、调用fs.writeFile()方法,写入文件内容
//参数1:表述文件存放的路径
//参数2:表示写入的内容
//参数3:回调函数
fs.writeFile('./2.text','abcd',function(err){
    //2.1、如果文件写入成功,则err的值为NULL
    //2.2、如果文件写入失败,则err的值等于一个错误对象
    console.log(err);
})

判断文件是否写入成功

可以判断 err 对象是否为 null,从而知晓文件写入的结果:

//1、导入fs文件系统模块
const fs = require('fs')
//2、调用fs.writeFile()方法,写入文件内容
//参数1:表述文件存放的路径
//参数2:表示写入的内容
//参数3:回调函数
fs.writeFile('./2.text','abcd',function(err){
   if(err){
       return console.log('文件写入失败!' + err.message)
   }
   console.log('文件写入成功!');
})

 fs.mkdir 创建目录

 创建目录

形参解析

path:传入将要被创建的文件夹路径

options.recursive:表示是否创建父目录

callback(err, path):err是创建文件夹过程产生的错误信息,path是创建的第一个目录路径

创建目录,我们需要注意几个问题:

 目录已存在,重复创建

重复创建目录不会发生报错,只是fs.mkdir的回调函数path参数会返回undefined

创建的目录是多级的,

创建多级目录,需要设置options.recursive为true,才能将多级目录都创建成功,并且fs.mkdir的回调函数形参path是第一级目录的所在路径

如果options.recursive为false,则无法创建多级目录,只支持单个目录创建 

什么是 path 路径模块

path 模块是 Node.js 官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理
需求。

例如:

path.join() 方法,用来将多个路径片段拼接成一个完整的路径字符串

path.dirname()方法用于获取给定路径的目录名称。它会忽略相应平台的尾随目录分隔符。 

如果要在 JavaScript 代码中,使用 path 模块来处理路径,则需要使用如下的方式先导入它:

路径拼接 join

 path.join() 的语法格式

使用 path.join() 方法,可以把多个路径片段拼接为完整的路径字符串,语法格式如下:

参数解读:

…paths 路径片段的序列
返回值:

path.join() 的代码示例

使用 path.join() 方法,可以把多个路径片段拼接为完整的路径字符串:

const path = require('path')
const fs = require('fs')

// //注意: ../会抵消前面的路径

// const pathSter = path.join('/a','/b/c','../../','./d','e')

// console.log(pathSter)//     \a\d\e

fs.readFile(path.join(__dirname,'./1.text'),'utf8',function(err,dataStr){
    if(err){
        return console.log(err.message)
    }
    console.log(dataStr)
})

 运行截图:

注意:今后凡是涉及到路径拼接的操作,都要使用 path.join() 方法进行处理。不要直接使用 + 进行字符串的拼接。

path.dirname() 路径的目录名称

 用法

path.dirname()方法用于获取给定路径的目录名称。它会忽略相应平台的尾随目录分隔符。 

用法:

path.dirname( path )

参数:该函数接受上面提到并在下面描述的一个参数:

  • path:这是用于提取目录名称的文件路径。如果此参数不是字符串值,则抛出TypeError。

返回值:它返回带有路径目录的字符串。

以下示例程序旨在说明Node.js中的path.dirname()方法:

例子

范例1:

// Node.js program to demonstrate the     
// path.dirname() method  
     
// Import the path module 
const path = require('path'); 
   
// Complete file path 
path1 = path.dirname("/users/admin/website/index.html"); 
console.log(path1) 
   
// Only file name 
// returns a period (.) 
path2 = path.dirname("readme.md"); 
console.log(path2) 
   
// Path with file not specified 
path3 = path.dirname("website/post/comments") 
console.log(path3);

 输出:

/users/admin/website
.
website/post

范例2:

// Node.js program to demonstrate the     
// path.dirname() method  
     
// Import the path module 
const path = require('path'); 
   
console.log("File name:", __filename); 
path1 = path.dirname(__filename); 
console.log(path1); 
   
console.log("Directory name:", __dirname); 
path2 = path.dirname(__dirname); 
console.log(path2);

输出:

File name: G:\tutorials\nodejs-path-dirname\index.js
G:\tutorials\nodejs-path-dirname
Directory name: G:\tutorials\nodejs-path-dirname
G:\tutorials

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1296920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux各目录结构说明

文章目录 目录说明源码放哪里&#xff1f;拓展&#xff1a;Linux里面安装软件是装在home目录还是opt目录还是/usr/local好&#xff1f; bin boot dev etc home lib lib64 lostfound media mnt opt proc root run sbin srv sys tmp usr var 目录说明 bin 存放二进制可执行文件&…

玩转大数据11:数据可视化与交互式分析

1. 引言 数据可视化和交互式分析是大数据领域中的重要方面。随着大数据时代的到来&#xff0c;数据量越来越大&#xff0c;数据类型越来越复杂&#xff0c;传统的数据处理和分析方法已经无法满足我们的需求。数据可视化可以将复杂的数据以简单、直观的方式呈现出来&#xff0c…

素材创作平台,解决企业素材供给问题

企业对于高质量素材的需求日益增长。无论是为了提升品牌形象&#xff0c;还是为了推动产品销售&#xff0c;都需要大量的专业设计素材。然而&#xff0c;素材的获取、设计和定制往往是一项耗时耗力的工作。这时&#xff0c;美摄科技素材创作平台应运而生&#xff0c;为企业提供…

JVM 虚拟机 类的加载器分类与测试详解

Java全能学习面试指南&#xff1a;https://javaxiaobear.cn 1、类加载器的分类说明 JVM支持两种类型的类加载器&#xff0c;分别为引导类加载器&#xff08;Bootstrap ClassLoader&#xff09;和自定义类加载器&#xff08;User-Defined ClassLoader&#xff09;。 从概念上来…

webpack该如何打包

1.我们先创建一个空的大文件夹 2.打开该文件夹的终端 输入npm init -y 2.1.打开该文件夹的终端 2.2在该终端运行 npm init -y 3.安装webpack 3.1打开webpack网址 点击“中文文档” 3.2点击“指南”在点击“起步” 3.3复制基本安装图片画线的代码 4.在一开始的文件夹下在创建一…

营收增速持续放缓,博通CEO期待AI崛起救场 | 百能云芯

博通作为苹果等大型科技公司的芯片供应商&#xff0c;于周四发布了财报。尽管截至10月29日的第四季度营收增长了4%至93亿美元&#xff0c;符合市场预期&#xff0c;但增速已经降至2020年以来的最低水平。 由于企业客户和电信供应商在控制支出方面的谨慎态度&#xff0c;博通的销…

C 语言 变量

变量初始值 全局变量&#xff1a;初始值是 0 局部变量&#xff1a;初始值是 随机的 类型限定符 通常不需要显式使用 register 关键字来优化变量的存储和访问。 关键字 _Complex和_Imaginary分别用于表示复数和虚数&#xff08;二者皆是数学概念&#xff09; 变量的声明和定义 c…

【小白专用】MySQL创建数据库和创建数据表

1.在Windows开始搜索输入Mysql,并选择第一个打开。 2.输入安装时的密码 3.说明安装成功。 二、创建数据库 1. 连接 MySQL 输入 mysql -u root -p 命令&#xff0c;回车&#xff0c;然后输入 MySQL 的密码(不要忘记了密码)&#xff0c;再回车&#xff0c;就连接上 MySQL 了。 …

Vue3选项式-基础部分篇

Vue3选项式风格-基础部分篇 简介模板语法文本插值原始HTMLAttribute 绑定使用 JavaScript 表达式调用函数全局组件调用内置指令动态参数注意事项 data()data()深度响应 methods有状态的methods(防抖) DOM更新时机计算属性class和style绑定条件渲染列表渲染数组变换侦听事件处理…

全网最新最全【Kali Linux】 渗透测试技术大全

利矛出击&#xff1a;Kali Linux 渗透测试大法 在网络攻防实践中&#xff0c;系统的防御措施可以称为“盾”&#xff0c;而渗透测试则是“矛”。二者同等重要&#xff0c;因为“矛”可以试探出“盾”有多坚固&#xff0c;并且及时发现问题&#xff0c;修补漏洞&#xff0c;提升…

k8s之镜像拉取时使用secret

k8s之secret使用 一、说明二、secret使用2.1 secret类型2.2 创建secret2.3 配置secret 一、说明 从公司搭建的网站镜像仓库&#xff0c;使用k8s部署服务时拉取镜像失败&#xff0c;显示未授权&#xff1a; 需要在拉取镜像时添加认证信息. 关于secret信息,参考: https://www.…

[英语学习][10][Word Power Made Easy]的精读与翻译优化

[序言] 下面这段话, 译者翻译没有太大问题, 就是某些单词上, 跟他理解得不一样. 另外还有一个关键的定语从句, 我认为译者理解不到位, 导致翻译不够通顺. [英文学习的目标] 提升自身的英语水平, 对日后编程技能的提升有很大帮助. 希望大家这次能学到东西, 同时加入我的社区讨…

修改正点原子综合实验的NES模拟器按键控制加横屏

​​​​​​​ 开发板&#xff1a;stm32f407探索者开发板V2 屏幕是4.3寸-800-480-MCU屏 手头没有V3开发板&#xff0c;只有V2&#xff0c;所以没法测试 所以只讲修改哪里&#xff0c;请自行修改 先改手柄部分&#xff0c;把手柄改成按键 找到左边的nes文件夹中的nes_mai…

matlab RGB三元组和十六进制的转换

matlab画柱状图改颜色的时候&#xff0c;用三元组的形式&#xff0c;范围是[0&#xff0c;1] 我们获得了十六进制 到网站转换为[0,255] https://c.runoob.com/front-end/55/ 然后将得到的值/255 输入matlab就可以了

VS2009和VS2022的错误列表可复制粘贴为表格

在VS2019或VS2022中&#xff0c;可看到如下错误列表&#xff1a; 如果复制这两行错误信息&#xff1a; 然后把它粘贴到word文件&#xff0c;就可以看到以下表格&#xff1a; 严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) E0020 未定义标识符 "dd"…

Docker 部署 2FAuth 服务

拉取最新版本的 2FAuth 镜像&#xff1a; $ sudo docker pull 2fauth/2fauth:latest在本地预先创建好 2fauth 目录, 用于映射 2FAuth 容器内的 /2fauth 目录。 使用以下命令, 在 前台 运行 2FAuth 容器: $ sudo docker run -it --rm --name 2fauth -p 10085:8000/tcp -v /ho…

从简单到入门,一文掌握jvm底层知识文集。

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

Qt基础-组件的添加、删除或更新

本文介绍如何在Qt中组件的添加、删除或更新。 概述 有时安装完qt后发现当前的组件需要进一步调整,这时就需要进一步操作安装的文件。 QT的组件管理软件并没有在开始菜单或者桌面添加快捷方式(5.9版本),也没有在代码编辑界面设置相关的选项,藏的比较深。 操作步骤 找到…

【工程实践】使用modelscope下载大模型文件

前言 Modelscope&#xff08;魔搭社区&#xff09;是阿里达摩院的一款开源模型平台&#xff0c;里面提供了很多的热门模型供使用体验&#xff0c;其中的模型文件可以通过git clone 快速下载。并且为模型提供了Notebook的快速开发体验&#xff0c;使用阿里云服务&#xff0c;不需…

arm平台编译so文件回顾

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、几个点二、回顾过程 1.上来就执行Makefile2.编译第三方开源库.a文件 2.1 build.sh脚本2.2 Makefile3.最终编译三、其它知识点总结 前言 提示&#xff1a;这…