详解如何实现一个简单的node . js脚手架

  

<强>原因
  

  

在工作中,需要开发一个脚手架,用于给相关用户提供相关的开发便利性。

  

<>强适合人群
  

  

对前端、节点操作有一定的了解,同时向了解脚手架开发过程或者需要自己实现一个脚手架的开发者。

  

<强>目标

  
      <李>开发一个简单的脚手架,能够提供给用户进行安装。   <李>能够输出相关提示。   <李>对用户文件进行读写操作。   <李>在脚手架中使用Shell脚本。   
  

<强>步骤
  

  

<强>开发脚手架
  

  

脚手架的开发最开始过程与普通的前端项目相同,需要一个入口文件command.js和配置文件package.json。

  

与其他配置文件不同的是,需要在package.json文件中加上一下一项:

        {   …,   "本":{   :“cm-cli command.js”   }   }      

在配置文件中增加了此项后,只需要在配置文件根目录下执行npm链接命令,即可使用cm-cli——帮助命令来查看加载的cm-cli脚手架。

  

如果你发布了你的脚手架,那么在其他用户使用命令npm安装- g cm-cli之后,便可以在全局下使用你的脚手架了。

  

<强>对用户进行提示
  

  

在对注释和命令进行提示中,我们需要使用到指挥官包,使用npm安装指挥官即可进行安装。(如果npm版本低于5,则需要添加——拯救参数保证更新package.json配置文件)。

  

指挥官是一个提供用户命令行输入和参数解析的强大功能。有需要的可以阅读相关的库文档。在这里我介绍两个用的最多的方法。

  

<强>选择
  

  

能够初始化自定义的参数对象,设置关键字和描述,同时还可以设置读取用户输入的参数。具体用法如下:

        const指挥官=要求(“指挥官”);      commander.version (“1.0.0”)   .option (“————aaa”、“五星级”)   .option (' - b, bbb ', ' bbbbb ')   .option (- c, ccc[名字],“ccccc”)   .parse (process.argv);         如果(commander.aaa) {   console.log (' aaa ');   }      如果(commander.bbb) {   console.log (bbb);   }      如果(commander.ccc) {   控制台。日志(“ccc”, commander.ccc);   }      之前      

具体展示如下:

  

详解如何实现一个简单的node . js脚手架

  

<强>命令
  

  

该方法能够在命令行增加一个命令。用户在执行此命令后,能够执行回调中的逻辑。具体用法如下:

        指挥官   .command (“init & lt; extensionId>”)   .description(“初始化扩展项目”)   .action ((extensionId)=比;{   控制台。日志(“初始化扩展项目“$ {extensionId} ");//todo你需要的东西   });      

具体展示效果如下:

  

, 详解如何实现一个简单的node . js脚手架

  

<强>对用户文件进行读写操作
  

  

通过上面的步骤,我们已经能够完成一个简单的脚手架了。下面,我们需要读取用户配置,同时为用户生成一些模板文件。

  

<强>读取文件
  

  

现在,我们需要读取用户的cm-cli.json配置文件来进行一些配置。

  

我们可以使用node . js的fs文件模块来对文件进度读操作,由于此处没有太多难点,因此略去。

  

<强>写入文件模板
  

  

我们提前将模板文件存储在CDN上,再根据本地读取到的相关脚手架配置文件来进行模板的下载。

  

注:脚手架中读取的路径为使用者使用时当前路径,因此没有办法将模板文件存储在脚手架中进行读取。

  

我们可以使用诸如请求这种库来帮助我们进行文件下载,简化操作步骤。执行npm安装请求”即可进行安装。

  

注:在文件写入时建议先判断文件是否存在,再进行覆盖。

  

<强>使用Shell脚本
  

  

与节点。js提供的API函数来看,有些人更加倾向于使用Shell脚本来进行文件操作。幸运的是,我们也可以在我们的脚手架中引入node-cmd来启用对Shell脚本的支持。执行npm安装node-cmd即可进行安装。

详解如何实现一个简单的node . js脚手架