Comments (9)
I moved this plugin to npm: https://www.npmjs.com/package/watch-ignore-webpack-plugin
from webpack-dev-middleware.
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.
Thanks! I increased the limit of file watchers on OSX to solve this issue for me.
from webpack-dev-middleware.
Have you tried the WatchIgnorePlugin
?
from webpack-dev-middleware.
No i didn't yet.. But maybe someday, we'll need it.
from webpack-dev-middleware.
Is this outdated now? I tried using the plugin but the compiler object has no watchFileSystem
property
from webpack-dev-middleware.
EDIT:
WatchIgnorePlugin.prototype.apply = function(compiler) {
compiler.plugin("after-environment", function() {
compiler.watchFileSystem = new IgnoringWatchFileSystem(compiler.watchFileSystem, this.paths);
});
};
from webpack-dev-middleware.
@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.
@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)
- webpack-dev-middleware/types/index.d.ts requires @types/node@16 when Node.js 12 is still LTS HOT 1
- Problem with filesystem import
- Problem with file system import HOT 1
- Support for multipart range requests HOT 2
- Configurable logging HOT 1
- Bump memfs to 3.4.2 HOT 3
- [5.3.2] .d.ts references dom Request/Response HOT 5
- How to reference in-memory bundle from webpack-dev-middleware ? HOT 2
- Error: EPIPE: broken pipe, write causing livereload to break on Windows HOT 2
- Shared content base for multiple compiler instances HOT 6
- Propuesta
- Nueva propuesta
- Adding Hapi To The Other Servers Section Of README HOT 3
- Incorrect stats position field in res object HOT 10
- Incorrect content type when using typescript worker in dev server HOT 4
- middleware blocks on requests to non-webpack assets HOT 14
- Upgrade memfs HOT 1
- Bump json-joy dependency to new version due to bug fix with reserved windows file names HOT 2
- Address the vulnerability HOT 10
- memorize util printed out CACHE key HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from webpack-dev-middleware.