Copied from math.stackexchangemath.stackexchange: Another way to approach this avoids the use of duality via inner-products. Functorality should be clear. It may be that one requires finite rank free modules here so that the bilnear pairing below is perfect.
The bilinear pairing is, $$ V \times \Lambda^{n-1} V \to \Lambda^n V $$ sending $$ (v, \eta) \to v \wedge \eta $$ and written $$ \langle v, \eta \rangle = v \wedge \eta. $$
Then given $T : V \to V$, we define, $$ \Lambda^{n-1} T : \Lambda^{n-1} V \to \Lambda^{n-1} V $$ on indecomposable elements by $$ \Lambda^{n-1} T (v_1 \wedge \cdots v_{n-1}) = T(v_1) \wedge \cdots \wedge T(v_{n-1}) $$ and extend to all of $\Lambda^{n-1} V$ by alternating multilinearity as usual.
The adjugate $\operatorname{adj}(T) : V \to V$ is the adjoint of $\Lambda^{n-1} T$ with respect to the pairing: $$ \langle \operatorname{adj}(T) (v), \eta \rangle = \langle v, \Lambda^{n-1} T (\eta) \rangle, $$ or using the definition of the pairing, $$ \operatorname{adj} (T) (v) \wedge \eta = V \wedge \Lambda^{n-1} T \eta $$
Now one observes that, $$ \begin{split} \langle \operatorname{adj} (T) \circ T (v), \eta\rangle &= \langle T(v), \Lambda^{n-1} T(\eta)\rangle \\ &= T(v) \wedge \Lambda^{n-1} T (\eta) \\ &= \Lambda^{n} T (v \wedge \eta) \\ &= \det T v \wedge \eta \\ &= \langle \det T v, \eta \rangle \end{split} $$
If the pairing is perfect, this implies that, $$ \operatorname{adj} (T) \circ T = \det T \operatorname{Id}. $$
In particular, if $\det T$ is an invertible element of the underlying ring, then $\det T \operatorname{Id}$ is invertible and $\operatorname{adj} (T)$ commutes with $T$ (which both are invertible) as well as satisfying, $$ \operatorname{adj} (T) = \det T T^{-1} $$ which is the usual formula.
This all explained (sections 5 to 8) here: