Tengo un proyecto de nodeJS donde tengo este archivo GameState.js con esta estructura:
const GameState = function(socket){ this.socket = socket //quite a large constructor so I removed most of it }; //defining all the prototype methods GameState.prototype.getSocket = function() { return this.socket } module.exports = GameState;Puedo usar este constructor GameScreen en mi archivo gamescreen.js, al tener los dos scripts en mi archivo gamescreen.html como este:
<script src = "gamestate.js"></script> <script src = "gamescreen.js"></script>Entonces, para obtener GameState en gamescreen.js, en realidad no necesito module.exports, incluso me da un ReferenceError (que no se rompe) cuando uso la aplicación, lo cual es bastante molesto.
Sin embargo, con mi estructura actual no puedo eliminar este módulo. Exportaciones ya que también tengo un archivo de prueba (usando broma) donde importo GameState con un requisito como este:
const GameState = require("../scripts/gamestate.js"); //the tests here...Entonces mi pregunta es: ¿Cómo obtengo GameState tanto en gamescreen.js como en gamestate.test.js, sin tener el ReferenceError? En este momento todo está funcionando, pero no es muy óptimo obtener un error en la consola al ejecutar la aplicación.
EDITAR: una mejor manera de formular esta pregunta podría ser: tengo un módulo GameState definido con module.exports, ahora, ¿cómo lo obtengo en gamescreen.js (el lado del cliente), sin perder la capacidad de importarlo con require( ...) en un archivo de prueba?
Me deshice del error simplemente envolviendo module.exports en un bloque try catch como este:
try { module.exports = GameState; } catch(error) { console.log("didn't work") }Cuando lo ejecuto en el navegador, funciona normalmente e imprime: "no funcionó" y cuando ejecuto mis pruebas con npm test, las pruebas también funcionan.
Puede que no sea la solución más bonita, por lo que agradecería cualquier otra sugerencia.