Emacs 24.3 or below
There's no built-in way of preventing these old files from being loaded, but
there are easy ways to get rid of them.
- You can recompile the entire elpa directory by calling:
M-x byte-recompile-directory RET ~/.emacs.d/elpa/.
This should get rid of outdated files.
- You can use the
auto-compile package and
activate
auto-compile-on-load-mode which can compile files before
they are loaded.
Emacs 24.4
Yes, and it turns out to be rather simple. The load-prefer-newer
variable serves precisely this purpose.
(setq load-prefer-newer t)
Unfortunately, it won't work when some code specifically targets the
.elc file, such as (load "server.elc"). But it should be enough as
long as you're using requires or calling load without a suffix, which you should.
From the doc:
load-prefer-newer is a variable defined in lread.c.
Its value is nil
Documentation:
Non-nil means load prefers the newest version of a file.
This applies when a filename suffix is not explicitly specified and
load is trying various possible suffixes (see load-suffixes and
load-file-rep-suffixes). Normally, it stops at the first file
that exists unless you explicitly specify one or the other. If this
option is non-nil, it checks all suffixes and uses whichever file is
newest.
Note that if you customize this, obviously it will not affect files
that are loaded before your customizations are read!