在开发环境中,启动一个koa应用服务通常需要同时启动数据库。例如。如Mongodb、mysql等一直在运行数据库服务,如果不使用,电脑会占用一定的性能。但是,如果每次都手动启动服务,效率并不高。因此,如果我们执行npmrunstart来启动koa应用,如果能够提前启动需要的服务,效率会高很多。简单的说就是把我们平时运行的命令写成脚本,开机运行。这里我们以mongodb为例来说明这个过程。1.Mongodb启动脚本我们在应用目录/post-process/sh/mongodb.sh#!/usr/bin/shdbPath=$HOME/Documents/database/mongo-db#startupmongodservice新建一个脚本文件#这里我们把mongodb服务放在后台运行,错误输出重定向到./logs/mongod.logmongod--dbpath${dbPath}>./logs/mongod.log&2.使用child-process运行shellscripts结合nodejs的child_process模块??,编写一个运行脚本的方法://post-process/index.jsconst{exec}=require('child_process');/***执行一个shell脚本*@param{*}shell*/constexcecShell=(shell)=>{exec(`sh${shell}`,(err,stdout,stderr)=>{if(err){console.log(err)返回true}else{console.log(stdout)}})}/***检查依赖实际上是运行一系列脚本*/constdependencyCheck=(shellArray)=>{if(Array.isArray(shellArray)){shellArray.map(item=>excecShell(item))}else{console.log('Illeagalshellqueue!')}}module.exports={excecShell:excecShell,dependencyCheck:dependencyCheck}3.把检查过程写到config.js里,也写我的执行检查config.js://config/index.jsconstfs=require('fs')constpath=require('path')letscriptPath=path.resolve(path.join('./post-process/sh'))//console.log(scriptPath)module.exports=appConfig=>{//省略...config={preChecksScripts:[`${scriptPath}/mongodb.sh`],}returnconfig}四、在app.js中执行check过程:constKoa=require('koa')constapp=newKoa()constappConfig=require('./config')()//省略...//环境检查脚本constpreCheckTool=require('./post-process')//检查所需的脚本数组constcheckScripts=appConfig.preChecksScriptspreCheckTool.dependencyCheck(checkScripts)//...
