When you "require" a module, you have no control over the life time of the instance returned. You get the instance across the entire process. This is a big problem for testing. Approach two enables pushing in different configuration under different circumstances. At times, I've needed other modules to be pushed in rather than "required" directly.
Consider how you would tackle this problem if you were publishing the module as an NPM package from its own repository. You wouldn't assume that a client of the module would place a configuration file in some common place. You likely wouldn't impose a service configuration mechanism on the dev using your module.
Obviously, it depends. Sometimes simply requiring a config Json file directly is more than good enough.
Mario Pareja