设置浏览器同步和配置样式和脚本的观察者

注意

这个页面说明了浏览器同步, gulp-watch 和 run-sequence 之类的 gulp 插件的使用,并继续讨论****我们在 Gulpjs-workflow-automation-1 中停留的 gulp-workflow-automation。如果你降落在这里,考虑先审阅该帖子。

  • 默认任务
  • 监视程序任务 - 无论何时映像,都可以动态地持续构建部署就绪资产 JS | css 在发展过程中发生了变化。

让我们从浏览器同步开始。

Gulp 看门狗任务

让我们从看门狗任务开始吧。

目标是观察你在开发过程中所做的更改。任何改变,都应该触发相应的 gulp 任务。

此外,我们需要一种在浏览器上同步你的更改的功能。

浏览器同步

因此,我们需要安装 Browser Sync。

bash $ npm install browser-sync --save-dev

有了这个前提,让我们打开我们的 gulpfile.js 并添加监视功能。让我们要求浏览器同步并定义一些变量以使用其功能。

在 gulp 文件的顶部,添加以下代码段。将它放在图像压缩声明的正下方。

像这样:

//Browser-sync

var sync = require('browser-sync').create();
var reload = sync.reload;

让浏览器同步你的开发到浏览器是一个简单的配置。让我们创建一个名为 watchdog 的任务。

像这样:

$.task('watchdog', function() {

})

现在,如果我们在这里浏览浏览器同步选项,并搜索服务器设置,我们可以看到它是多么容易。

我们只需将下面的内容放在我们的看门狗任务中

Snippet - 1 - 内部看门狗样板

/*
 Initiate Browser sync
 @documentation - https://www.browsersync.io/docs/options/
 */
 sync.init({
  server: {
    baseDir: "./"
 },
 port: 8000 //change it as required
 });

将上面插入上面的看门狗样板内部。

下一个片段是定义样式的观察者,目标是重新处理已更改的 css 文件或新文件,并自动触发浏览器重新加载。

片段 - 2 - 内部看门狗样板

$.watch(['css/**/*', 'fonts/google/**/*.css'], reload).on('change', function(event) {
console.log(event.type + ':' + event.path)
if (event.type === 'deleted') {
uncache('styles', event.path);
$$.remember.forget('auto-prefixed-stylesheets', event.path);
}
sequence('optimizeStyles')
});

将上面插入上面的看门狗样板内部。

所以我们正在监控,即,

字体/ google 下 css / all css 文件下的所有 css 文件当有任何更改或添加新文件时,它会在 browsersync 声明中触发重新加载方法,该方法在 gulp 文件的顶部定义。

注意:你可能会注意到,我们将一个 .on 事件处理程序附加到观察程序。

$.watch(['css/**/*', 'fonts/google/**/*.css'], reload).on('change', function(event) 

基本上,任何 CUD(Create | Update | Delete)都会触发重载函数,并将事件 Object 作为参数传递给回调函数。

回调是一个至关重要的功能,我们可以在资产删除时实现像 uncache 这样的操作。现在,事件对象具有类似的参数

  • 路径
  • type - 创建/更新/删除

如果资产被删除,我们需要确保我们在早期的缩小函数中构建的缓存(通过 gulp-cached 和 gulp-remember)需要更新。

我们正在处理下面的代码片段,这是在变更回调中。

if (event.type === 'deleted') { 
uncache('styles', event.path);
$$.remember.forget('auto-prefixed-stylesheets', event.path);  
}

注意

$ - > gulp 的别名

$$ - > gulp-load-plugins 的别名

你可能还会注意到,在我编写了 uncache 调用之后,我有了一个 sequence('optimizeStyles');

序列方法,确保,同步方法默认运行在异步 javascript 中。

安装很简单

bash $ npm install run-sequence

然后,在浏览器同步声明下方的 gulp 文件中声明它。

var sequence = require('run-sequence');

因此,通过这种理解,脚本的观察者很容易编写。只是不同的球!

因此,将此片段添加到监视程序样板内的样式监视器下方。

Snippet - 3 - 在 Watchdog 任务样板中

/*
on addition or change or deletion of a file in the watched directories
the change event is triggered. An event object with properties like
path,
event-type
is available for perusal passed to the callback

*/
$.watch('js/**/*', reload).on('change', function(event) {
console.log(event.type + ':' + event.path)
if (event.type === 'deleted') {
uncache('scripts', event.path);
$$.remember.forget('linted-scripts', event.path);
}
sequence('optimizeScripts');
});

注意

我们在上面的代码段中使用了两个函数。

  • 非缓存
  • $$。remember.forget 注意:

$ - > alul for gulp

$$ - > gulp-load-plugins 的别名

让我们在调用之前在 gulpfile.js 中的某处定义函数 uncache。

/*
Deletes a cache entry
*/
var uncache = function(cacheName, cacheKey) {
        var cache = $$.cached;
        if (cache.caches[cacheName] && cache.caches[cacheName][cacheKey])
            return delete cache.caches[cacheName][cacheKey];
        return false;
    }
    /*
    logs current cache created via gulp-cached
    */
var viewCache = function() {
    console.log($$.cached.caches)
}