Skip to content

Commit

Permalink
Use proper directory for cache files (#1763)
Browse files Browse the repository at this point in the history
Operating systems have defined directories for cache files.
That allows them to do smart things such as leaving them out when doing a backup,
or deleting them when disk space gets low.

Also a %home%\.deno folder on windows made no sense whatsoever.

Fixes #481
  • Loading branch information
flying-sheep authored and ry committed Feb 13, 2019
1 parent c468be6 commit e782ba1
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 4 deletions.
8 changes: 7 additions & 1 deletion src/deno_dir.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,13 @@ impl DenoDir {
) -> std::io::Result<Self> {
// 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");
Expand Down
12 changes: 9 additions & 3 deletions website/manual.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit e782ba1

Please sign in to comment.