diff --git a/crates/volta-core/src/project/mod.rs b/crates/volta-core/src/project/mod.rs index 745739db0..2ce193d00 100644 --- a/crates/volta-core/src/project/mod.rs +++ b/crates/volta-core/src/project/mod.rs @@ -109,7 +109,10 @@ impl Project { extends = manifest.extends; } - let platform = platform.map(TryInto::try_into).transpose()?; + let platform = match platform.map(TryInto::try_into).transpose()? { + Some(platform) => Some(platform), + None => Self::platform_from_node_version(&manifest_file), + }; Ok(Project { manifest_file, @@ -119,6 +122,25 @@ impl Project { }) } + /// Returns a Node.js version from .node_version_file + fn platform_from_node_version(manifest_file: &Path) -> Option { + // project path without package.json + let project_path = manifest_file.parent()?; + + match std::fs::read_to_string(project_path.join(".node_version")) { + Ok(version) => match Version::parse(version) { + Ok(node) => Some(PlatformSpec { + node, + yarn: None, + npm: None, + pnpm: None, + }), + Err(_) => None, + }, + Err(_) => None, + } + } + /// Returns a reference to the manifest file for the current project pub fn manifest_file(&self) -> &Path { &self.manifest_file