diff --git a/src/deno_dir.rs b/src/deno_dir.rs index 9d175077a4ebfa..bcde8792758baf 100644 --- a/src/deno_dir.rs +++ b/src/deno_dir.rs @@ -63,7 +63,13 @@ impl DenoDir { ) -> std::io::Result { // Only setup once. let home_dir = dirs::home_dir().expect("Could not get home directory."); - let default = home_dir.join(".deno"); + let fallback = home_dir.join(".deno"); + // We use the OS cache dir because all files deno writes are cache files + // Once that changes we need to start using different roots if DENO_DIR + // is not set, and keep a single one if it is. + let default = dirs::cache_dir() + .map(|d| d.join("deno")) + .unwrap_or(fallback); let root: PathBuf = custom_root.unwrap_or(default); let gen = root.as_path().join("gen"); diff --git a/website/manual.md b/website/manual.md index 5ec0ccdb1e4d25..da0948e06b9dfc 100644 --- a/website/manual.md +++ b/website/manual.md @@ -359,9 +359,15 @@ and yet it accessed the network. The runtime has special access to download imports and cache them to disk. Deno caches remote imports in a special directory specified by the `$DENO_DIR` -environmental variable. It default to `$HOME/.deno` if `$DENO_DIR` is not -specified. The next time you run the program, no downloads will be made. If the -program hasn't changed, it won't be recompiled either. +environmental variable. It defaults to the system's cache directory if +`$DENO_DIR` is not specified. The next time you run the program, no downloads +will be made. If the program hasn't changed, it won't be recompiled either. The +default directory is: + +- On Linux/Redox: `$XDG_CACHE_HOME/deno` or `$HOME/.cache/deno` +- On Windows: `%LOCALAPPDATA%/deno` (`%LOCALAPPDATA%` = `FOLDERID_LocalAppData`) +- On macOS: `$HOME/Library/Caches/deno` +- If something fails, it falls back to `$HOME/.deno` **But what if `https://deno.land/` goes down?** Relying on external servers is convenient for development but brittle in production. Production software should