diff --git a/CHANGELOG.md b/CHANGELOG.md index a9f63f2a90..a80a23a4dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ - Fix error message that falsely suggested using coercion when it wouldn't work. https://github.com/rescript-lang/rescript/pull/7721 - Fix formatter removes () from functor type. https://github.com/rescript-lang/rescript/pull/7735 +- Rewatch: don't compile dev-dependencies of non local dependencies with `--dev`. https://github.com/rescript-lang/rescript/pull/7736 # 12.0.0-beta.3 diff --git a/rewatch/src/build/packages.rs b/rewatch/src/build/packages.rs index 92338c4682..24eca3d82e 100644 --- a/rewatch/src/build/packages.rs +++ b/rewatch/src/build/packages.rs @@ -45,6 +45,7 @@ struct Dependency { config: config::Config, path: PathBuf, dependencies: Vec, + is_local_dep: bool, } #[derive(Debug, Clone)] @@ -359,6 +360,10 @@ fn read_dependencies( } }; + let is_local_dep = { + canonical_path.starts_with(project_root) + && !canonical_path.components().any(|c| c.as_os_str() == "node_modules") + }; let dependencies = read_dependencies( &mut registered_dependencies_set.to_owned(), @@ -367,7 +372,7 @@ fn read_dependencies( project_root, workspace_root, show_progress, - build_dev_deps, + is_local_dep && build_dev_deps, ); Dependency { @@ -375,6 +380,7 @@ fn read_dependencies( config, path: canonical_path, dependencies, + is_local_dep } }) .collect() @@ -405,7 +411,7 @@ pub fn read_package_name(package_dir: &Path) -> Result { .ok_or_else(|| anyhow!("No name field found in package.json")) } -fn make_package(config: config::Config, package_path: &Path, is_root: bool, project_root: &Path) -> Package { +fn make_package(config: config::Config, package_path: &Path, is_root: bool, is_local_dep: bool) -> Package { let source_folders = match config.sources.to_owned() { Some(config::OneOrMore::Single(source)) => get_source_dirs(source, None), Some(config::OneOrMore::Multiple(sources)) => { @@ -444,11 +450,6 @@ This inconsistency will cause issues with package resolution.\n", ); } - let is_local_dep = { - package_path.starts_with(project_root) - && !package_path.components().any(|c| c.as_os_str() == "node_modules") - }; - Package { name: package_name, config: config.to_owned(), @@ -477,7 +478,7 @@ fn read_packages( // Store all packages and completely deduplicate them let mut map: AHashMap = AHashMap::new(); - let root_package = make_package(root_config.to_owned(), project_root, true, project_root); + let root_package = make_package(root_config.to_owned(), project_root, true, true); map.insert(root_package.name.to_string(), root_package); let mut registered_dependencies_set: AHashSet = AHashSet::new(); @@ -492,7 +493,7 @@ fn read_packages( )); dependencies.iter().for_each(|d| { if !map.contains_key(&d.name) { - let package = make_package(d.config.to_owned(), &d.path, false, project_root); + let package = make_package(d.config.to_owned(), &d.path, false, d.is_local_dep); map.insert(d.name.to_string(), package); } }); diff --git a/rewatch/testrepo/packages/with-dev-deps/package.json b/rewatch/testrepo/packages/with-dev-deps/package.json index ba75a51072..aade5a549c 100644 --- a/rewatch/testrepo/packages/with-dev-deps/package.json +++ b/rewatch/testrepo/packages/with-dev-deps/package.json @@ -8,5 +8,8 @@ "license": "MIT", "devDependencies": { "@rescript/webapi": "0.1.0-experimental-73e6a0d" + }, + "dependencies": { + "rescript-nodejs": "16.1.0" } } diff --git a/rewatch/testrepo/packages/with-dev-deps/rescript.json b/rewatch/testrepo/packages/with-dev-deps/rescript.json index af67bfbaa2..c440306251 100644 --- a/rewatch/testrepo/packages/with-dev-deps/rescript.json +++ b/rewatch/testrepo/packages/with-dev-deps/rescript.json @@ -9,6 +9,7 @@ "type": "dev" } ], + "dependencies": ["rescript-nodejs"], "dev-dependencies": ["@rescript/webapi"], "package-specs": { "module": "es6", diff --git a/rewatch/testrepo/yarn.lock b/rewatch/testrepo/yarn.lock index 7a81460a11..8317e98114 100644 --- a/rewatch/testrepo/yarn.lock +++ b/rewatch/testrepo/yarn.lock @@ -107,9 +107,17 @@ __metadata: resolution: "@testrepo/with-dev-deps@workspace:packages/with-dev-deps" dependencies: "@rescript/webapi": "npm:0.1.0-experimental-73e6a0d" + rescript-nodejs: "npm:16.1.0" languageName: unknown linkType: soft +"rescript-nodejs@npm:16.1.0": + version: 16.1.0 + resolution: "rescript-nodejs@npm:16.1.0" + checksum: 10c0/2ea271dbddebdceec79bf5ee6089c15474f2c014cb22c1cc39d43ef27fd363fcb1cd8e1244d0cb998cd6b426d7474e3055e41277951fb01ee1eeecf68bbe01ab + languageName: node + linkType: hard + "rescript@npm:12.0.0-beta.1, rescript@npm:^12.0.0-alpha.13": version: 12.0.0-beta.1 resolution: "rescript@npm:12.0.0-beta.1" diff --git a/rewatch/tests/snapshots/bs-dev-dependency-used-by-non-dev-source.txt b/rewatch/tests/snapshots/bs-dev-dependency-used-by-non-dev-source.txt index 34ddd13310..612ef06fad 100644 --- a/rewatch/tests/snapshots/bs-dev-dependency-used-by-non-dev-source.txt +++ b/rewatch/tests/snapshots/bs-dev-dependency-used-by-non-dev-source.txt @@ -1,4 +1,4 @@ -Cleaned 0/16 +Cleaned 0/56 Parsed 2 source files Compiled 2 modules diff --git a/rewatch/tests/snapshots/dependency-cycle.txt b/rewatch/tests/snapshots/dependency-cycle.txt index b0463dddf6..fc917ef90a 100644 --- a/rewatch/tests/snapshots/dependency-cycle.txt +++ b/rewatch/tests/snapshots/dependency-cycle.txt @@ -1,4 +1,4 @@ -Cleaned 0/16 +Cleaned 0/56 Parsed 1 source files Compiled 0 modules diff --git a/rewatch/tests/snapshots/remove-file.txt b/rewatch/tests/snapshots/remove-file.txt index a1e2468b7f..44af3f1f88 100644 --- a/rewatch/tests/snapshots/remove-file.txt +++ b/rewatch/tests/snapshots/remove-file.txt @@ -1,4 +1,4 @@ -Cleaned 1/16 +Cleaned 1/56 Parsed 0 source files Compiled 1 modules diff --git a/rewatch/tests/snapshots/rename-file-internal-dep-namespace.txt b/rewatch/tests/snapshots/rename-file-internal-dep-namespace.txt index 55eb9df4b5..081e01497b 100644 --- a/rewatch/tests/snapshots/rename-file-internal-dep-namespace.txt +++ b/rewatch/tests/snapshots/rename-file-internal-dep-namespace.txt @@ -1,4 +1,4 @@ -Cleaned 2/16 +Cleaned 2/56 Parsed 2 source files Compiled 3 modules diff --git a/rewatch/tests/snapshots/rename-file-internal-dep.txt b/rewatch/tests/snapshots/rename-file-internal-dep.txt index 6596297776..fb5ccbd7b3 100644 --- a/rewatch/tests/snapshots/rename-file-internal-dep.txt +++ b/rewatch/tests/snapshots/rename-file-internal-dep.txt @@ -1,4 +1,4 @@ -Cleaned 2/16 +Cleaned 2/56 Parsed 2 source files Compiled 2 modules diff --git a/rewatch/tests/snapshots/rename-file-with-interface.txt b/rewatch/tests/snapshots/rename-file-with-interface.txt index 4c2522e129..002228c2af 100644 --- a/rewatch/tests/snapshots/rename-file-with-interface.txt +++ b/rewatch/tests/snapshots/rename-file-with-interface.txt @@ -1,5 +1,5 @@  No implementation file found for interface file (skipping): src/ModuleWithInterface.resi -Cleaned 2/16 +Cleaned 2/56 Parsed 1 source files Compiled 2 modules diff --git a/rewatch/tests/snapshots/rename-file.txt b/rewatch/tests/snapshots/rename-file.txt index 29c1b2b461..4b0a9ca875 100644 --- a/rewatch/tests/snapshots/rename-file.txt +++ b/rewatch/tests/snapshots/rename-file.txt @@ -1,4 +1,4 @@ -Cleaned 1/16 +Cleaned 1/56 Parsed 1 source files Compiled 1 modules diff --git a/rewatch/tests/snapshots/rename-interface-file.txt b/rewatch/tests/snapshots/rename-interface-file.txt index 6eabc087b8..a0da89ae4b 100644 --- a/rewatch/tests/snapshots/rename-interface-file.txt +++ b/rewatch/tests/snapshots/rename-interface-file.txt @@ -1,5 +1,5 @@  No implementation file found for interface file (skipping): src/ModuleWithInterface2.resi -Cleaned 1/16 +Cleaned 1/56 Parsed 1 source files Compiled 2 modules