首页 > 解决方案 > gulp 任务未到达错误处理程序

问题描述

我正在通过 gulp 上传和部署共享点包。有时,应用程序目录文件夹可能不存在,因此上传会失败。我只想记下错误并继续前进。我试图在我的代码中添加一些错误处理,但我似乎无法捕捉到它。我已经尝试过在管道内部、外部以及 for 循环之后的 try/catch。

错误

Uploading packge to widget catalog...
[14:29:40] Uploading test.sppkg
[14:29:40] INFO: Folder 'AppCatalog' doesn't exist and will be created
[14:29:40] ERROR: StatusCodeError: 403 - {"error":{"code":"-2147024891, System.UnauthorizedAccessException","message":{"lang":"en-US","value":"Access denied."}}}

Gulp 代码

const gulp = require('gulp');
const build = require('@microsoft/sp-build-web');
const spsync = require('gulp-spsync-creds').sync;
const sppkgDeploy = require('node-sppkg-deploy');


for (const site of sites) {
   console.log("Uploading packge to " + site + " catalog...");
       await new Promise((resolve, reject) => {
          gulp
          .src(folderLocation)
          .pipe(
            spsync({
              username: uname,
              password: pwd,
              site: siteUrl + "/" + site,
              libraryPath: catalogName,
              publish: true,
            })
          )
          .on("finish",() => {
            console.log("Completed upload of:" + name + ". Starting deploy... ");
              sppkgDeploy.deploy({
                username: uname,
                password: pwd,
                absoluteUrl: siteUrl + "/" + site,
                filename: name,
                skipFeatureDeployment: true,
                verbose: false
            });
            resolve();
          })
          .on("error", (e)=>{
            console.log("%%%%%%%%%%FAILED!")
          });
        });
      }

最终,我想捕获错误号 403 ......然后做一个简单的 console.log 并继续前进。有人可以告诉我哪里出错了吗?我目前正在研究 gulp 管道工(?)以防万一。但这是我的第一个 gulp 脚本,所以 .. 只是与社区核实一下,以防我在某个地方误入歧途。

谢谢。

编辑 1

更新了我的代码,如下所示:

      await new Promise((resolve, reject) => {
          gulp
          .src(folderLocation)
          .pipe(
            spsync({
              username: uname,
              password: pwd,
              site: siteCatalogUrl + "/",
              libraryPath: catalogName,
              publish: true,
            }).on("error", e => console.log("==@@@@@@@@THIS HAS BOMBED@@@@@@@@@@@@@@")))
          .on("finish",resolve); 
          });

基本上只是为 spsync 添加了错误处理程序。但是代码也从来没有打到那里。

标签: javascriptgulp

解决方案


你不是第一个遇到这个问题的人。是一个stackoverflow帖子,是另一个基本相同问题的要点帖子。似乎有两种不同的可能性。一种是使用gulp-plumber,另一种是使用files-exist。这是一个如何使用的示例files-exists

try {
    return src(filesExist('foo.js'))
        .pipe(src('foo.js'))
        // continue pipe
} catch (error) {
    // error handling
}

我还想强调一下我在试验时发现的一些东西。如果您在src创建流后立即添加错误侦听器,则会捕获错误,因此这将起作用:

return src('non-existing.js')
    .on('error', () => { console.log('Caught error') })
    ... more pipe stuff

但是,如果在pipe调用之后添加了错误侦听器,那么它将不起作用,如下所示:

return src('non-existing.js')
    .pipe(/* some pipe action */)
    .on('error', () => { console.log('Will not be caught') })
    ... more pipe stuff

推荐阅读