Sabemos que la palabra clave estática JS define propiedades y métodos estáticos para una clase. El método o las propiedades estáticas no se pueden llamar desde instancias de la clase. En cambio, están llamando desde la propia clase.
class Car { static run() { console.log('Car running...') } } // Error: (intermediate value).run // is not a function ( new Car() ).run() // Car running... Car.run()
Relación entre require() y module.exports: por defecto, module.exports apunta a un objeto. El valor de module.exports puede ser literal, función, objeto, etc. Cuando exportamos un módulo, significa que exportamos el valor de module.exports .
La tarea de la función require() es importar el valor de module.exports en el módulo desde donde fue llamado. El valor devuelto por la función require() en moduleB es igual al objeto module.exports en moduleA . Entonces, la relación se muestra a continuación.
require() == module.exports
Exportar clase con método estático: si desea exportar una clase con un método estático desde el módulo NodeJS, la idea es tan simple como exportar una clase en sí. Veamos algunos ejemplos.
Paso 1: Cree un proyecto de NodeJS usando el siguiente comando.
mkdir Project&& cd Project npm init -y
Paso 2: Cree dos archivos JS en el directorio raíz de su proyecto y asígneles el nombre App.js y myModule.js
Estructura del proyecto: Se verá así.
Paso 3: edite myModule.js con el siguiente código.
myModule.js
// myModule module class Car{ static run() { console.log('Car running...') } } // Export this module module.exports = Car
Hemos creado una clase llamada Car con el método estático run() en myModule.js y la exportamos asignando la clase misma a module.exports
Paso 4: A continuación, edite su App.js con el siguiente código.
App.js
// Import myModule const mercedes = require('./myModule') // Printing data console.log(mercedes) // Invoke static function mercedes.run()
En el archivo App.js , importamos myModule usando la función require() y asignamos el valor de retorno al nombre de variable mercedes . Entonces, la clase Car se asigna directamente a mercedes , y ahora podemos invocar el método estático run() de mercedes desde el módulo App.js.
Paso 5: Ejecute el servidor usando el siguiente comando.
node App.js
Producción:
[Function: Car] Car running...
Si desea exportar un módulo en forma de objeto, agregue la clase Car como una propiedad de module.exports como se muestra a continuación:
myModule.js
// myModule module class Car{ static run() { console.log('Car running...') } } // Export this module // add class Car as a property // of module.exports module.exports = { Car }
App.js
// Importing our module const mercedes = require('./myModule').Car // Executing run function mercedes.run()
Ejecute el servidor con el siguiente comando.
node App.js
Producción:
Car running...