Fonts 忽略某些无吞咽错误,或阻止它尝试使用css关键字调用@imports

Fonts 忽略某些无吞咽错误,或阻止它尝试使用css关键字调用@imports,fonts,error-handling,less,gulp,Fonts,Error Handling,Less,Gulp,因此,我使用gulp作为任务引擎来处理更少的编译(除其他外),我们的部分样式表包括fonts.com中的字体 以下是我们gulpfile中的相关任务: var gulp = require('gulp'), plugins = require('gulp-load-plugins')({ camelize: true }); browserSync = require('browser-sync'); reload = browserSync.re

因此,我使用gulp作为任务引擎来处理更少的编译(除其他外),我们的部分样式表包括fonts.com中的字体

以下是我们gulpfile中的相关任务:

var gulp = require('gulp'),
        plugins = require('gulp-load-plugins')({ camelize: true });
        browserSync = require('browser-sync');
        reload = browserSync.reload;

gulp.task('styles', function() {
    gulp.src(['less/styles.less',
                    'less/special-styles.less',
                    'less/special-styles2.less',
                    'less/special-styles3.less',
                    'less/special-styles4.less',
                    'less/special-styles5.less',
                    'less/special-form-styles.less'])
        .pipe(plugins.less())
        .on('error', plugins.util.log)
        .pipe(plugins.autoprefixer('last 15 versions', 'ie 8', 'ios 6', 'android 4'))
        .pipe(plugins.rename({ suffix: '.min' }))
        .pipe(plugins.minifyCss())
        .pipe(reload({stream:true}))
        .pipe(gulp.dest('css'))
        .pipe(plugins.livereload())
        .pipe(plugins.notify({ message: 'Styles task complete' }));
});
以及文件中的相关行:font/base/stylesheet.css,它包含在上述一些源文件中,如:
@import(less)../font/base/stylesheet.css'(这里使用less指令,因为我们在文件中使用变量-@{FONT_PATH_PREFIX},以处理它从不同位置被包括在内的事实):

现在问题本身:截至上周五,我们在浏览该URL时遇到500个错误,导致gulp失败,原因是:

[09:55:33] Starting 'styles'...
[09:55:33] Finished 'styles' after 420 ms

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: Broken @import declaration of "http://fast.fonts.net/t/1.css?apiType=css&projectid=API_KEY" - error 500
到目前为止,我尝试了几件事,但都没有成功:

在font/base/stylesheet.css文件中,我尝试将关键字
css
optional
添加到
@import
行中(一起和单独),但是无论怎样,我都得到了相同的结果

我发现events.js文件是browsersync模块的一部分,我并没有真正使用它(gulp在一个无头的服务器上运行,没有浏览器可谈),所以我试着对以下行进行注释:
.pipe(reload({stream:true}))
.pipe(plugins.liveload())
,但结果没有改变

我还在fonts.com上谈论为什么我们突然出现了一个500错误,但在核心问题上,我觉得gulp less不应该在使用css关键字时尝试加载这些URL-导入语句应该直接获取输出,以便浏览器在加载css时处理,对吗

我也有一种感觉,我也许可以防止错误被抛出,但我还没有在这方面取得任何进展。我尝试更改以下对象的错误处理程序:

.on('error', function(){plugins.util.log(arguments);return;}
…正如我在gulp-less页面上读到的,如果存在错误处理程序,则不应抛出该错误,我认为util.log处理程序可能只是重新抛出该错误,但这并没有起到任何作用


这里最好的做法是什么?这只是页面浏览跟踪url,所以老实说,我不在乎它是否加载或是否包含有效的css(特别是在编译时),我只需要在我的最终css中使用import语句来满足fonts.com的要求。

上周五也遇到了同样的错误。我认为这里的主要问题是,对fonts.com(fast.fonts.net)进行HTTP调用会返回500个错误。为了解决这个问题,我们使用了HTTPSHTTPS,它可以正常工作

我不知道为什么HTTP会抛出500个错误,但也许他们现在只支持HTTPS。。。可能地然而,我在任何地方都找不到这一点,所以我现在把它当作一个bug来对待。如果支持已经停止,那么我希望重定向能够到位

此外,您还可以解决您的吞咽管道中的问题。您需要将processImport参数作为false传递给minifyCss

...  
.pipe(plugins.minifyCss({processImport: false}))  
...
不会尝试将快速字体URL作为css的一部分。。。也应该稍微加快速度。它不是像您所想的那样不吞咽地抛出错误,而是minifyCss(它是一个包装器)

注意:您可能需要检查最终的CSS,以确保它正确地包含了所有其他内容(应该很好,因为您的较少处理已经完成)

还有谁知道他们的fast.fonts.net现在返回500?我在推特上发过支持,但没有回复。我在别处找不到有人提到这件事

编辑:通过将响应与两者进行比较,您将看到这一点


我非常肯定这是正确答案-现在无法测试,但我会在明天测试完成后进行评分。非常感谢你的帮助。顺便问一下,是否有一种良好的调试模式,人们通常会使用它来找出在一长串任务中错误是从哪里产生的(例如,在本例中,发现问题是在minifyCss中,而不是更少)?我觉得如果我在文档中结束了,我会自己解决这个问题,但我不确定如何达到这一点。我不是吞咽专家,但一位同事偶然发现了原因,因为我们将所有吞咽功能分解为单独的任务,可以单独运行,如果需要的话,可以在更精细的级别运行。不幸的是,我不确定调试模式。吞咽是有点痛。哦,很高兴看到不仅仅是我。这对我来说非常有效,非常感谢你的帮助
...  
.pipe(plugins.minifyCss({processImport: false}))  
...