美文网首页技术干货
处理node在自动构建过程中的异常

处理node在自动构建过程中的异常

作者: wuww | 来源:发表于2019-06-05 01:35 被阅读3次

    部署项目可以分为构建、发布两个步骤。构建过程打包源代码,生成最终运行的文件,发布过程使用打包后的文件更新线上程序。有时我们会在构建过程中使用nodejs来处理一些工作,比如源代码的打包、上传静态资源至CDN等。如果这些过程发生了错误,应该立即终止部署流程,避免线上事故。

    如何终止部署流程?

    一般一个部署流程是一段 linux shell。可以在shell中通过&& 操作符依次执行命令。如果其中某个进程错误退出,shell 将不会继续执行。
    比如:

    echo msg1 && echo msg2 && aErrorCmd && echo msg3;
    

    上述命令依次执行 echo msg1, echo msg2, aErrorCmd, echo msg3 4个命令。执行到aErrorCmd处,程序错误退出。第四个命令echo msg3将不会执行。

    执行结果

    如何查看进程是否错误退出?

    可以通过查看进程的退出状态码来确定进程是否错误退出。如果进程的退出状态码为0,表示进程正常退出。否则表示进程错误退出。进程结束后,可以通过$?查看进程的退出状态码。

    比如:

    echo msg1;echo $?;
    

    echo msg1命令正常退出,$?的值为0。

    aErrorCmd;echo $?;
    

    aErrorCmd命令错误退出,$?的值不为0。

    执行结果

    如何错误退出nodejs进程?

    在nodejs中可以通过抛出异常的方法使进程错误退出。

    // index.js
    throw new Error('错误')
    
    # shell
    node index;echo $?;
    
    运行结果

    进程的退出状态码为 1 。

    但是,在promise的回调中抛出异常,程序仍正常退出。

    // index.js
    Promise.resolve().then(() => {
        throw new Error('错误')
    })
    
    # shell
    node index;echo $?;
    
    运行结果

    进程的退出状态码为 0 。

    那么如何在promise回调中异常退出进程呢?可以在nodejs中调用process.exit(1)

    Promise.resolve().then(() => {
        process.exit(1)
    })
    
    # shell
    node index;echo $?;
    
    执行结果

    进程的退出状态码为 1 。

    如何在webpack打包错误后错误退出?

    const webpack = require('webpack')
    const webpackConfig = require('./webpack.prod.conf')
    
    
    
    webpack(webpackConfig, function (err, stats) {
        if (err) throw err
    
        process.stdout.write(stats.toString({
            colors: true,
            modules: false,
            children: false,
            chunks: false,
            chunkModules: false
        }) + '\n')
    
        if (stats.hasErrors()) {
            process.exit(1)
        }
        
    })
    
    
    

    打包后,通过回调参数statshasErrors方法判断webpack是否成功打包。如何含有打包错误,程序异常退出。webpack文档参考

    相关文章

      网友评论

        本文标题:处理node在自动构建过程中的异常

        本文链接:https://www.haomeiwen.com/subject/gjmdxctx.html