From 1da1bb5a0263cb2568bdf205face992d7c0ab001 Mon Sep 17 00:00:00 2001 From: Tomasz Czubocha Date: Tue, 20 Jan 2026 17:43:40 +0000 Subject: [PATCH] fix: enable polling in chokidar to prevent EMFILE errors on macOS (#13281) --- packages/engine/src/lib/devMode/index.js | 3 +++ .../serverless/lib/plugins/aws/dev/index.js | 19 +++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/engine/src/lib/devMode/index.js b/packages/engine/src/lib/devMode/index.js index 522ec5e62..de5190ce3 100644 --- a/packages/engine/src/lib/devMode/index.js +++ b/packages/engine/src/lib/devMode/index.js @@ -903,6 +903,9 @@ export class ServerlessEngineDevMode { }, ignoreInitial: true, followSymlinks: false, + // usePolling is enabled because chokidar v4 removed fsevents support, + // causing "EMFILE: too many open files" errors on macOS with large projects + usePolling: true, // Add debounce to prevent rapid-fire events awaitWriteFinish: { stabilityThreshold: 300, diff --git a/packages/serverless/lib/plugins/aws/dev/index.js b/packages/serverless/lib/plugins/aws/dev/index.js index c2c2ac83f..7164312ad 100644 --- a/packages/serverless/lib/plugins/aws/dev/index.js +++ b/packages/serverless/lib/plugins/aws/dev/index.js @@ -105,10 +105,13 @@ class AwsDev { mainProgress.notice('Connecting') // TODO: This should be applied more selectively + // usePolling is enabled because chokidar v4 removed fsevents support, + // causing "EMFILE: too many open files" errors on macOS with large projects chokidar .watch(this.serverless.config.serviceDir, { ignored: /\.serverless/, ignoreInitial: true, + usePolling: true, }) .on('all', async (event, path) => { await this.serverless.pluginManager.spawn('dev-build') @@ -751,12 +754,16 @@ class AwsDev { this.serverless.configurationFilename, ) - chokidar.watch(configFilePath).on('change', (event, path) => { - logger.warning( - `If you've made infrastructure changes, restart the dev command w/ "serverless dev"`, - ) - logger.blankLine() - }) + chokidar + .watch(configFilePath, { + usePolling: true, + }) + .on('change', (event, path) => { + logger.warning( + `If you've made infrastructure changes, restart the dev command w/ "serverless dev"`, + ) + logger.blankLine() + }) } /**