nodejs命令列利用模板生成檔案腳手架開發
背景
在我司的所有專案中,有一類增刪改查的頁面出現率都是極其高的,我想做一個簡單的腳手架來幫助大家能快速生成頁面,在其上面進行具體業務修改進而提高開發效率。
選用依賴
開發命令列工具,TJ的"commander"是非常好的選擇
日誌,選用"winston3.x"和"dayjs"配合
模板,選用熟悉的"ejs"
"fs-extra",檔案操作的封裝與擴充套件
"jest",做一些簡單的測試
其他,"eslint"語法檢查以及外掛,還有一些commit資訊檢查的支援
開始開發
大致目錄結構
這類工具,首先是配置好使用者的命令怎麼去輸入,那麼第一步則是bin檔案的開發:
// bin/index.js#!/usr/bin/env node'use strict';const program = require('commander');const packageJson = require('../package.json');const handle = require('../util/handle'); program .version(packageJson.version) .option('-c, --config', 'required, the path of the JSON configuration') .option('-p, --path ', 'The path(include name) of the file you want to generate') .parse(process.argv);// 處理邏輯handle(program.config, program.path);
bin檔案加上shebang頭,告訴系統使用nodejs執行這一段指令碼。
這裡是讓使用者採用argv的形式傳入引數執行檔案,“commander”預設會-h生成幫助,我們同時需要編寫每個option的幫助語句。這裡我是讓使用者傳入json配置路徑(相對執行命令目錄)與需要生成檔案路徑(相對執行命令目錄,可不寫,預設當前目錄)
"commander"還支援其他命令,例如“command”模板語句加“command”的操作,具體文件我們可以在中看到。
然後我們在package.json加上下面這一段
{ "bin": { "crud-init": "bin/index.js" } }
然後 我們就可以拿到引數開發業務邏輯了:
'use strict';const fs = require('fs');const fse = require('fs-extra');const path = require('path');const assert = require('assert');const log = require('./logger');const ejs = require('ejs');const exec = require('child_process').exec;/** * @param {string} configPath json配置路徑 * @param {string} filePath 生成檔案路徑(相對執行命令目錄,包含檔名) */module.exports = (configPath, filePath) => { assert(configPath, '-cor --config ,The JSON configuration path must exist'); assert(!filePath || /.vue$/.test(filePath), '-p or --path ,The path must end with .vue'); const startTime = Date.now(); const cPath = path.join(process.cwd(), configPath); const fPath = path.join(process.cwd(), filePath || 'Unknown.vue'); let config; try { config = fse.readJsonSync(cPath); } catch (e) { assert.ifError(e); } const tplPath = path.join(__dirname, '../template/Crud.ejs'); const str = ejs.render(fs.readFileSync(tplPath, 'utf-8'), config); if (fse.pathExists(fPath)) { // 檔案路徑存在則先刪除原檔案 fse.removeSync(fPath); } // 確保檔案被建立 fse.ensureFileSync(fPath); fs.writeFileSync(fPath, str); log.info(`生成位置:${fPath}`); const cmdStr = `${path.join(process.cwd(), 'node_modules/.bin/eslint')} --fix ${fPath}`; exec(cmdStr, err => { if (err) { log.warn('eslint修復失敗,請檢查是否在根目錄執行命令以及eslint是否安裝'); } log.info(`執行結束,用時${(Date.now() - startTime) / 1000}s`); }); };
這裡我採用的是ejs模板生成了檔案,然後執行當前工程的eslint進行修復。具體ejs模板怎麼寫在這就不貼出來了,大家如果還是做這個功能的話,按照自己實際情況去寫即可。
以下是日誌的簡單配置,只是為了好看,不用日誌工具用console也是可以的。
// util/logger.js'use strict';const { createLogger, format, transports } = require('winston');const { combine, colorize, timestamp, printf } = format;const day = require('dayjs');const myFormat = printf(info => { return `${day(info.timestamp).format('YYYY-MM-DD HH:mm:ss:SSS')} ${info.level}: ${info.message}`; });module.exports = createLogger({ level: 'info', format: combine( colorize(), timestamp(), myFormat ), transports: [ new transports.Console() ], });
除錯的時候,使用 npm link 可以模擬全域性安裝,就能使用命令了。如果修改了package.json檔案,則需要重新執行npm link
寫了簡單的測試執行handle函式
作者:CaanDoll
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2524/viewspace-2810368/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 命令列生成jar檔案命令列JAR
- Kitex原始碼閱讀——腳手架程式碼是如何通過命令列生成的(二)原始碼命令列
- Kitex原始碼閱讀——腳手架程式碼是如何通過命令列生成的(一)原始碼命令列
- vue 腳手架 配置 及檔案介紹Vue
- 命令列應用開發初學者指南:腳手架篇、UI 庫和互動工具命令列UI
- 腳手架的開發總結
- Java如何搭建腳手架(自動生成通用程式碼),建立自定義的archetype(專案模板)Java
- 如何開發自己的 yeoman 腳手架
- 利用nodejs寫一個自動生成vue元件檔案的cliNodeJSVue元件
- PHP怎麼使用命令列生成檔案?PHP命令列
- vue 腳手架 配置 及檔案介紹 2.0 版本Vue
- 前端工程化: 腳手架+物料庫快速生成新專案前端
- 如何自己開發一個腳手架工具
- 前後端分離開發腳手架後端
- 簡單vue專案腳手架Vue
- 使用腳手架搭建VUE專案Vue
- Dva手腳架搭建React專案React
- 利用 lenosp 腳手架搭建測試工具平臺
- 用vue快速開發app的腳手架工具VueAPP
- 肝了一個半月的 Java 專案快速開發腳手架:ChewingJava
- 搭建自己的腳手架—“優雅”生成前端工程前端
- 利用msfvenom生成木馬檔案
- Flask實戰腳手架-專案建立Flask
- 【 Vue 】 Vue 使用腳手架建立專案Vue
- vue-cli腳手架中webpack配置基礎檔案詳解VueWeb
- vue腳手架Vue
- 從零開始搭建腳手架
- Java 根據模板生成 PDF 檔案 以及 excel 檔案JavaExcel
- vue腳手架多頁自動化生成實踐Vue
- 什麼是腳手架?為什麼需要腳手架?常用的腳手架有哪些?
- NodeJS和命令列程式NodeJS命令列
- Pyinstaller利用spec檔案打包的使用模板
- 使用 Node.js 開發簡單的腳手架工具Node.js
- 從零打造你的前端開發腳手架前端
- SpringBoot2.1腳手架(種子)專案Spring Boot
- 用 yeoman 打造自己的專案腳手架
- 自己搭建一個vue專案(腳手架)Vue
- spring cloud腳手架專案(十一)logback配置SpringCloud