It works by making a copy of the model.material and shaders, for editing. Then changing line-8 in the fragment shader(model.fp) to this:
uniform mediump vec4 light;
That way, the uniforms are matching in both shaders. Both being set as mediump, or whatever(lowp, highp). It seems to work with any, as long as they match.
Is this difference in precision intentional? The built-in model material has the uniform light as lowp in the fragment shader and mediump in the vertex shader, which makes web builds crash.