node搭建簡(jiǎn)易腳手架

腳手架工作過程

1.通過命令行交互詢問用戶問題
2.根據(jù)回答生成文件

初始化模塊

1.初始化項(xiàng)目,在package.json添加bin入口
2.創(chuàng)建入口文件,添加#!/usr/bin/env node 標(biāo)識(shí)

獲取用戶輸入

使用inquirer模塊進(jìn)行交互

inquirer.prompt([
  {
    type:'input',
    name:'name',
    message:'project name?'
  }
]).then(answers => {
  
})
獲取文件路徑

使用path模塊獲取模板目錄,_dirname代表項(xiàng)目當(dāng)前目錄,process.cwd()獲取命令窗口目錄

 const tmplDir = path.join(_dirname,'templates')
 const destDir = process.cwd()
將模板目錄文件寫到目標(biāo)目錄中

1.使用fs模塊的readdir方法獲取到模板文件的相對(duì)路徑
2.使用模板引擎ejs的renderFile方法渲染文件
3.使用fs的writeFileSync方法寫入到目標(biāo)文件

 fs.readdir(tmplDir,(err,files)=>{
    if(err) throw err
    files.forEach(item=>{
      ejs.renderFile(path.join(tmplDir,item),answers,(err,res)=>{
        if (err) throw err
        fs.writeFileSync(path.join(destDir,item),res)
      })
    })
  })

完整代碼

#!/usr/bin/env node

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

inquirer.prompt([
  {
    type:'input',
    name:'name',
    message:'project name?'
  }
]).then(answers => {
  //模板目錄
  //_dirname是項(xiàng)目當(dāng)前目錄,process.cwd是命令行執(zhí)行的目錄
  const tmplDir = path.join(_dirname,'templates')
  const destDir = process.cwd()

  //將模板目錄的文件寫入到目標(biāo)目錄中
  //fs.readdir用于讀取目錄下的所有文件
  //ejs.renderFile方法參數(shù):1.絕對(duì)路徑 2.渲染參數(shù) 3.回調(diào)函數(shù)
  fs.readdir(tmplDir,(err,files)=>{
    if(err) throw err
    files.forEach(item=>{
      ejs.renderFile(path.join(tmplDir,item),answers,(err,res)=>{
        if (err) throw err
        fs.writeFileSync(path.join(destDir,item),res)
      })
    })
  })
})
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容