Gulp FTP 到 Azure WebApp 的脚本因 'getaddrinfo ENOTFOUND' 而失败

Gulp script that FTPs to Azure WebApp failing with 'getaddrinfo ENOTFOUND'

我正在尝试编写一个 gulp 脚本来监视我更改的文件(前端文件,如 css、js、cshtml)并将 FTP 它们发送到我的Azure WebApp 在它们被修改的那一刻。 我正在使用 gulp-ftp,但如果有更好的选择,请告诉我。

  gulp.src(cssRoot).pipe(
    foreach(function (stream, rootFolder) {
      gulp.watch([cssRoot + "/**/*.css", jsRoot + "/**/*.js", cshtmlRoot + "/**/*.cshtml"], function (event) {
        if (event.type === "changed") {
          console.log("publish file " + event.path);
          gulp.src(event.path, { base: './' })
          .pipe(ftp({
            host: 'ftp://my-azure.website-ftp-url/',
            user: 'my-azure-ftp-username\in-the-complete-form',
            pass: 'my-azure-ftp-password',
            remotePath: 'site\wwwroot\'
          }))
          .pipe(gutil.noop());
        }
        console.log("published " + event.path);
      });
      return stream;
    })
  );
});

我已经使用 FileZilla 检查了 FTP 的凭据,它工作正常。 (我使用方法 here 提取了它们)。

手表似乎工作正常,但是 FTP 似乎出现以下错误:

events.js:160
      throw er; // Unhandled 'error' event
      ^
Error: getaddrinfo ENOTFOUND ftp://my-azure.website-ftp-url/ ftp://my-azure.website-ftp-url/:21
    at errnoException (dns.js:28:10)
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:76:26)

有谁知道为什么连接不上?

我也不确定我的脚本是否会将文件复制到网站的相对位置,或者它是否会直接转到根目录.....但这完全是另一个问题。

好吧,gulp-ftp 确实表示它已被弃用,取而代之的是 vinyl-ftp,尽管这可能不是您的问题。我会从您的主机值中删除 "ftp://"(如果它存在)并查看它是否运行得更好。

这是一篇关于使用 vinyl-ftp using gulp with vinyl-ftp 的非常好的博客。 vinyl-ftp 也可以很好地处理只传输较新的文件。

  • 正如@Mark 所指出的,请先从主机值中删除 "ftp://"。

  • 然后您还需要将用户值中的“\”加倍(例如:"someapp\someuser")。见 .