2020年7月随笔

240 阅读1分钟

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

使用

详解操作系统内核对线程的调度算法

  • 进程:操作系统进行”资源分配“的基本单位
  • 线程:操作系统进行“调度”的基本单位

一个进程可以拥有多个线程