javascript - 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 添加了错误处理程序。但是代码也从来没有打到那里。
解决方案
你不是第一个遇到这个问题的人。这是一个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
推荐阅读
- python - 使用代码/Python 读取 Linux ARP 表的最简单方法
- php - PHP file_get_contents 和 Asana API
- python - 运行时错误设置 secret_key 错误 Flask
- angular - 如何解决这个 Angular 7“检测到循环依赖”警告
- asp.net - 如何使用 IIS 7 将两个不同的 asp.net Web 应用程序发布到单个网站
- javascript - 按列表中的顺序对 html DOM 元素进行排序
- sql - 如何在 BigQuery 的一列/行中合并多行值
- graphql - 向 graphql 客户端添加多个标头(apollo-boost)
- mysql - 如何计算多列的平均值并在sql server中排除零
- return-value - GNU屏幕结束时如何使GNU屏幕返回最后一个返回码