結合 Shell 對 Koa 應用執行環境檢查
阿新 • • 發佈:2018-12-22
在開發環境中,啟動一個koa 應用服務,通常還需要同時啟動資料庫。比如。Mongodb、mysql 等
如果一直開著資料庫服務,在不使用的話,電腦會佔一定的效能。然而如果每次手動去啟動服務,效率又不高。因此如果我們在執行npm run start
啟動 koa 應用時,如果可以提前把需要的服務啟動起來,那麼就會效率高很多。
簡單來說就是把我們平時執行的命令寫成指令碼,在啟動時執行即可。
這裡以mongodb 為例說明這個過程。
一、mongodb 啟動指令碼
我們在應用目錄下新建指令碼檔案
/post-process/sh/mongodb.sh
dbPath=$HOME/Documents/database/mongo-db #start up mongod service # 這裡把mongodb 服務後臺執行,錯誤輸出重定向到 ./logs/mongod.log mongod --dbpath ${dbPath} > ./logs/mongod.log &
二、利用child-process
執行shell 指令碼
結合nodejs 的 child_process
模組,寫一個執行指令碼的方法:
// post-process/index.js const { exec } = require('child_process'); /** * 執行一個 shell 指令碼 * @param {*} shell */ const excecShell = (shell) => { exec(`sh ${shell}`, (err, stdout, stderr) => { if (err) { console.log(err) return true } else { console.log(stdout) } }) } /** * 檢查依賴,其實就是執行一系列指令碼 */ const dependencyCheck = (shellArray) => { if (Array.isArray(shellArray)) { shellArray.map(item => excecShell(item)) } else { console.log('Illeagal shell queue!') } } module.exports = { excecShell: excecShell, dependencyCheck: dependencyCheck }
三、把檢查過程寫到config.js 中
還可以把我的執行檢查寫道config.js 中:
// config/index.js const fs = require('fs') const path = require('path') let scriptPath = path.resolve(path.join('./post-process/sh')) //console.log(scriptPath) module.exports = appConfig => { // 省略 ... config = { preChecksScripts: [ `${scriptPath}/mongodb.sh` ], } return config }
四、app.js 中執行檢查過程:
const Koa = require('koa')
const app = new Koa()
const appConfig = require('./config')()
// 省略...
// 環境檢查指令碼
const preCheckTool = require('./post-process')
// 需要檢查的指令碼陣列
const checkScripts = appConfig.preChecksScripts
preCheckTool.dependencyCheck(checkScripts)
// ...
來源:https://segmentfault.com/a/1190000017135577