# `mix compile.live_vue_contract`
[🔗](https://github.com/Egorrko/live_vue_contract/blob/v0.3.1/lib/mix/tasks/compile.live_vue_contract.ex#L1)

Runs `priv/gen.mjs` (node + `vue-component-meta` from the host's `node_modules`) when the
sources of the contract changed since the last run.

The sources are the `.vue` files under `:vue_root`, every project file the generator read a prop
type from (it reports them back), and the optional extra globs in `config :live_vue_contract,
:watch`. Their hash and list live in a stamp in the Mix manifest directory (`_build/<env>/…`),
not in the contract: an edit to code no prop type touches does not run node at all.

The generator rewrites the contract only when the schemas change. Every `~H` module lists the
contract as an external resource, so a rewrite with equal content would recompile all of them.

Without a stamp (fresh `_build`) and without `node`, an existing contract is used as is with a
warning; a missing one is an error.

Add before the Elixir compiler so `~H` sees a fresh contract:

    compilers: [:live_vue_contract, :phoenix_live_view] ++ Mix.compilers()

---

*Consult [api-reference.md](api-reference.md) for complete listing*
