diff --git a/crates/pack-api/src/project.rs b/crates/pack-api/src/project.rs index 629261d44..f81409de0 100644 --- a/crates/pack-api/src/project.rs +++ b/crates/pack-api/src/project.rs @@ -82,6 +82,15 @@ pub struct WatchOptions { /// Enable polling at a certain interval if the native file watching doesn't work (e.g. /// docker). pub poll_interval: Option, + + /// Paths to ignore when watching for file changes. + /// By default, ignores: node_modules + #[serde(default = "default_ignored_paths")] + pub ignored: Vec, +} + +pub fn default_ignored_paths() -> Vec { + vec!["node_modules".into()] } #[turbo_tasks::value] @@ -588,16 +597,20 @@ impl Project { } } - if denied_paths.is_empty() { + // Get watched ignored paths from configuration + let watched_ignored = self.watch.ignored.clone(); + + if denied_paths.is_empty() && watched_ignored.is_empty() { Ok(DiskFileSystem::new( PROJECT_FILESYSTEM_NAME.into(), self.root_path.clone(), )) } else { - Ok(DiskFileSystem::new_with_denied_paths( + Ok(DiskFileSystem::new_with_watched_ignored( PROJECT_FILESYSTEM_NAME.into(), self.root_path.clone(), denied_paths, + watched_ignored, )) } } diff --git a/crates/pack-napi/src/pack_api/project.rs b/crates/pack-napi/src/pack_api/project.rs index f2857e463..96ea57188 100644 --- a/crates/pack-napi/src/pack_api/project.rs +++ b/crates/pack-napi/src/pack_api/project.rs @@ -82,6 +82,10 @@ pub struct NapiWatchOptions { /// Enable polling at a certain interval if the native file watching doesn't work (e.g. /// docker). pub poll_interval_ms: Option, + + /// Paths to ignore when watching for file changes. + /// By default, ignores: node_modules + pub ignored: Option>, } #[napi(object)] @@ -178,6 +182,10 @@ impl From for WatchOptions { .poll_interval_ms .filter(|interval| !interval.is_nan() && interval.is_finite() && *interval > 0.0) .map(|interval| Duration::from_secs_f64(interval / 1000.0)), + ignored: val + .ignored + .map(|v| v.into_iter().map(|s| s.into()).collect()) + .unwrap_or_else(pack_api::project::default_ignored_paths), } } } diff --git a/crates/pack-schema/src/lib.rs b/crates/pack-schema/src/lib.rs index d7156d7b1..e8e9d9631 100644 --- a/crates/pack-schema/src/lib.rs +++ b/crates/pack-schema/src/lib.rs @@ -140,6 +140,11 @@ pub struct SchemaWatchOptions { /// Enable polling at a certain interval if the native file watching doesn't work (e.g. docker). #[serde(skip_serializing_if = "Option::is_none")] pub poll_interval: Option, + + /// Paths to ignore when watching for file changes. + /// By default, ignores: node_modules + #[serde(skip_serializing_if = "Option::is_none")] + pub ignored: Option>, } /// Environment variables for build-time injection diff --git a/next.js b/next.js index d78a3ebe0..eaa6d4cb6 160000 --- a/next.js +++ b/next.js @@ -1 +1 @@ -Subproject commit d78a3ebe0303e536179fc9ff497535a27bec4c90 +Subproject commit eaa6d4cb65d635448c1f5cfff6a51d4449beaf3f diff --git a/packages/pack/src/binding.d.ts b/packages/pack/src/binding.d.ts index 53142dc70..59d49efca 100644 --- a/packages/pack/src/binding.d.ts +++ b/packages/pack/src/binding.d.ts @@ -57,6 +57,11 @@ export interface NapiWatchOptions { * docker). */ pollIntervalMs?: number + /** + * Paths to ignore when watching for file changes. + * By default, ignores: node_modules + */ + ignored?: Array } export interface NapiProjectOptions { /**