Giter Site home page Giter Site logo

Comments (9)

christophercliff avatar christophercliff commented on May 1, 2024 2

I moved this plugin to npm: https://www.npmjs.com/package/watch-ignore-webpack-plugin

from webpack-dev-middleware.

sokra avatar sokra commented on May 1, 2024

There is no option, but you can add an option with an plugin.

Watching is handled by a WatchFileSystem on the watchFileSystem property of the Compiler. In node.js it is set to a instance of a NodeWatchFileSystem.

A simple decorator can filter the calls to this instance.

interface WatchFileSystem {
  watch(files, dirs, startTime, delay, callback, callbackUndelayed)
}

The callback has to deliver timestamps of all files and dirs, so the decorator must add timestamps for ignored files.

Here is a (untested) prototype:

function WatchIgnorePlugin(paths) {
  this.paths = paths;
}

module.exports = WatchIgnorePlugin;

WatchIgnorePlugin.prototype.apply = function(compiler) {
  compiler.plugin("after-environment", function() {
    compiler.watchFileSystem = new IgnoringWatchFileSystem(compiler.watchFileSystem, this.paths);
  });
};

function IgnoringWatchFileSystem(wfs, paths) {
  this.wfs = wfs;
  this.paths = paths;
}

IgnoringWatchFileSystem.prototype.watch = function(files, dirs, startTime, delay, callback, callbackUndelayed) {
  var ignored = function(path) {
    return this.paths.some(function(p) {
      return path.indexOf(p) == 0;
    });
  }.bind(this);
  var notIgnored = function(path) { return !ignored(path); };
  var ignoredFiles = files.filter(ignored);
  var ignoredDirs = dirs.filter(ignored);
  this.wfs.watch(files.filter(notIgnored), dirs.filter(notIgnored), startTime, delay, function(err, filesModified, dirsModified, fileTimestamps, dirTimestamps) {
    if(err) return callback(err);
    ignoredFiles.forEach(function(path) {
      fileTimestamps[path] = 1;
    });
    ignoredDirs.forEach(function(path) {
      dirTimestamps[path] = 1;
    });
    callback(err, filesModified, dirsModified, fileTimestamps, dirTimestamps);
  }, callbackUndelayed);
};

Than add it in the webpack options:

{
  plugins: [
    new WatchIgnorePlugin([path.join(__dirname, "node_modules")])
  ]
}

from webpack-dev-middleware.

meaku avatar meaku commented on May 1, 2024

Thanks! I increased the limit of file watchers on OSX to solve this issue for me.

from webpack-dev-middleware.

sokra avatar sokra commented on May 1, 2024

Have you tried the WatchIgnorePlugin?

from webpack-dev-middleware.

meaku avatar meaku commented on May 1, 2024

No i didn't yet.. But maybe someday, we'll need it.

from webpack-dev-middleware.

maxkostow avatar maxkostow commented on May 1, 2024

Is this outdated now? I tried using the plugin but the compiler object has no watchFileSystem property

from webpack-dev-middleware.

sokra avatar sokra commented on May 1, 2024

EDIT:

WatchIgnorePlugin.prototype.apply = function(compiler) {
  compiler.plugin("after-environment", function() {
    compiler.watchFileSystem = new IgnoringWatchFileSystem(compiler.watchFileSystem, this.paths);
  });
};

from webpack-dev-middleware.

maxkostow avatar maxkostow commented on May 1, 2024

@sokra thanks!

Here's the complete working version for anybody else.

function WatchIgnorePlugin(paths) {
    this.paths = paths;
}

module.exports = WatchIgnorePlugin;

WatchIgnorePlugin.prototype.apply = function (compiler) {
    compiler.plugin("after-environment", function () {
        compiler.watchFileSystem = new IgnoringWatchFileSystem(compiler.watchFileSystem, this.paths);
    }.bind(this));
};

function IgnoringWatchFileSystem(wfs, paths) {
    this.wfs = wfs;
    this.paths = paths;
}

IgnoringWatchFileSystem.prototype.watch = function (files, dirs, startTime, delay, callback, callbackUndelayed) {
    var ignored = function (path) {
        return this.paths.some(function (p) {
            return path.indexOf(p) === 0;
        });
    }.bind(this);
    var notIgnored = function (path) { return !ignored(path); };
    var ignoredFiles = files.filter(ignored);
    var ignoredDirs = dirs.filter(ignored);
    this.wfs.watch(files.filter(notIgnored), dirs.filter(notIgnored), startTime, delay, function (err, filesModified, dirsModified, fileTimestamps, dirTimestamps) {
        if(err) return callback(err);
        ignoredFiles.forEach(function (path) {
            fileTimestamps[path] = 1;
        });
        ignoredDirs.forEach(function (path) {
            dirTimestamps[path] = 1;
        });
        callback(err, filesModified, dirsModified, fileTimestamps, dirTimestamps);
    }, callbackUndelayed);
};

from webpack-dev-middleware.

sokra avatar sokra commented on May 1, 2024

@christophercliff cool... Could you add it to this list? http://webpack.github.io/docs/list-of-plugins.html

from webpack-dev-middleware.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.