child_process
node中的子进程模块
创建子进程的四种方式
-
exec
以字符串的形式执行命令行命令,执行完成以后直接将结果抛出
exec('cat *.js 文件 | wc -l', (error, stdout, stderr) => { if (error) { console.error(`执行的错误: ${error}`); return; } console.log(`stdout: ${stdout}`); console.error(`stderr: ${stderr}`); }); -
execFile
与exec类似,不过是执行可执行文件
-
fork
fork和spawn类似,fork是执行一个可执行文件,并且主进程可以和子进程进行通信
const child = fork('src/cover.js') // 主进程监听子进程 child.on('message', (message) => { if (message.status === 'success') { child.kill() resolve(message.data) } if (message.status === 'error') { // 杀死子进程 child.kill() reject(message.data) } }) // 子进程监听主进程 process.on('message', function (params) { if (params.status === 'start') { } }) // 子进程想主进程发送信息 process.send({ status: 'error', data: this.depState.error, }) -
spawn
执行shell命令,并返回一个基于流的子进程对象,可以持续获得输出的流
const spawn = require('child_process').spawn const child = spawn(cmd, args) let resp = '' child.stdout.on('data', function (buffer) { resp += buffer.toString() }) child.stdout.on('close', function (code) { callback(resp) })
github CI/CD
- CI:持续集成
- CD:持续交付
使用github提供的actions模块实现CI\CD
配置actions
进入github的actions模块,可以使用默认的流程,也可以自定义创建流程,我这里使用的是自定义
主要需要配置两个地方
1. 触发的时机,我这里是当master分支发生push或者pr时触发
2. 配置需要执行的npm命令
```yml
# This is a basic workflow to help you get started with Actions
name: vpBlog
# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
# Runs a set of commands using the runners shell
- name: install dependencies
run: npm install
# Runs a single command using the runners shell
- name: build project
run: npm run build
```
执行actions
看下图的红框中,当我向master分支提交脚本文件时,该文件已经在执行了
查看执行结果
执行的结果,日志都可以看到
总结
我们可以借助actions,在代码的push和pr时进行管理,例如进行eslint校验,进行单元测试,只有通过了才可以merge代码,实现自动化管理。
期间在使用ssh连接服务器传输数据时遇到了连接问题,参考www.runoob.com/w3cnote/set…
参考文章
vue-jest
安装
使用vue-cli新建的项目可以直接选择jest作为测试框架,如果是已创建的vue-cli项目,可以使用以下命令集成jest
vue add unit-jest
使用
详解操作系统内核对线程的调度算法
- 进程:操作系统进行”资源分配“的基本单位
- 线程:操作系统进行“调度”的基本单位
一个进程可以拥有多个线程