New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Options to exclude files #3
Comments
There is no option, but you can add an option with an plugin. Watching is handled by a WatchFileSystem on the 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 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")])
]
} |
Thanks! I increased the limit of file watchers on OSX to solve this issue for me. |
Have you tried the |
No i didn't yet.. But maybe someday, we'll need it. |
Is this outdated now? I tried using the plugin but the compiler object has no |
EDIT: WatchIgnorePlugin.prototype.apply = function(compiler) {
compiler.plugin("after-environment", function() {
compiler.watchFileSystem = new IgnoringWatchFileSystem(compiler.watchFileSystem, this.paths);
});
}; |
@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);
}; |
I moved this plugin to npm: https://www.npmjs.com/package/watch-ignore-webpack-plugin |
@christophercliff cool... Could you add it to this list? http://webpack.github.io/docs/list-of-plugins.html |
Hey @sokra!
I just had some troubles on osx and the max. file watcher limit.
Is it possible to exclude certain folders via options?
Excluding node_modules would probably solve my problems.
The text was updated successfully, but these errors were encountered: