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() + }) } /**