利用node.js实现自动生成前端项目组件的方法详解

 更新时间:2017年07月12日 11:27:19   作者:bleach  
最近在学习用,基于nodejs的强大,我从原本的只写前端变成了写全栈。下面这篇文章主要给大家介绍了关于利用node.js实现自动生成前端项目组件的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们下面来一起看看吧。

本文主要给大家介绍了关于利用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.jb51.net/201707/yuanma/angularSeed(jb51.net).rar

相关文章

  • npm install卡住不动的七种解决方法

    npm install卡住不动的七种解决方法

    在Node.js开发过程中,npm install 是安装和管理项目依赖的关键命令,然而,有时我们会遇到 npm install 运行卡住不动的情况,本文将为你提供七种解决方案,帮助你顺利进行依赖安装,需要的朋友可以参考下
    2024-07-07
  • node中http模块的使用及执行流程

    node中http模块的使用及执行流程

    http这个模块的职责就是帮你创建编写服务器,接下来通过本文给大家介绍node中http模块的使用及执行流程,感兴趣的朋友一起看看吧
    2021-09-09
  • 详解node字体压缩插件font-spider的用法

    详解node字体压缩插件font-spider的用法

    在本篇文章中给大家详细讲述了node字体压缩插件font-spider的用法的相关知识点内容,有需要的朋友参考下。
    2018-09-09
  • Node.js 如何利用异步提升任务处理速度

    Node.js 如何利用异步提升任务处理速度

    这篇文章主要介绍了Node.js 如何利用异步提升任务处理速度,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • 配置node服务器并且链接微信公众号接口配置步骤详解

    配置node服务器并且链接微信公众号接口配置步骤详解

    这篇文章主要介绍了配置node服务器并且链接微信公众号接口配置步骤详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • 如何使用Node.js判断png图片是否存在透明像素

    如何使用Node.js判断png图片是否存在透明像素

    这篇文章主要给大家介绍了关于如何使用Node.js判断png图片是否存在透明像素的相关资料,文中将实现的原理以及代码介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • Node.js 使用 zlib 内置模块进行 gzip 压缩

    Node.js 使用 zlib 内置模块进行 gzip 压缩

    这篇文章主要介绍了Node.js 使用 zlib 内置模块进行 gzip 压缩,nodejs为我们提供了一个zlib内置模块,我们可以使用它其中的gzip方法来对传递的数据进行压缩,从而提高数据传递效率,更多相关内容需要的朋友可以参考一下
    2022-09-09
  • Node.js使用NodeMailer发送邮件实例代码

    Node.js使用NodeMailer发送邮件实例代码

    本篇文章主要介绍了Node.js使用NodeMailer发送邮件实例代码,具有一定的参考价值,有兴趣的可以了解一下。
    2017-03-03
  • nodejs搭建本地http服务器教程

    nodejs搭建本地http服务器教程

    本篇文章主要介绍了nodejs搭建本地http服务器教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • node.js中的事件处理机制详解

    node.js中的事件处理机制详解

    相信接触过编程的同学应该都了解,在访问任何网页的时候,会伴随着许多的事件,例如点击菜单,移动鼠标等等。那么node.js是如何处理的?下面通过这篇文章就来给大家详细的介绍下node.js中的事件处理机制,有需要的朋友们可以参考借鉴,下面来一起学习学习吧。
    2016-11-11

最新评论