When running facter -p on windows, if there are custom facts or module facts that require some additional files that that are not yet present in $LOAD_PATH, it will cause an error.
This error is caused by the way base modules/vendor paths are generated. When running facter -p, puppet needs to set $LOAD_PATH so that facter will know where to check for module facts. When loading the module path, puppet will call Facter.value of a non core fact, and this will start the re-evaluation of all custom/plugin facts without setting the $LOAD_PATH. This step fails if a fact requires some additional file not yet in $LOAD_PATH.
Now the $LOAD_PATH will be set without using Facter, getting it directly from the system environment.