Traté de buscar, pero no puedo encontrar una respuesta precisa/concisa a esta pregunta. Parece que se usa de manera vaga e intercambiable, en mi opinión. ¿Alguien puede enseñarme?
¡Buena pregunta!
Antecedentes: los archivos JavaScript solían ser muy pequeños, pero a medida que el lenguaje JavaScript se ha vuelto más popular, los archivos JavaScript se han vuelto tan grandes que se introdujeron "módulos" para ayudar a dividir el código JavaScript en partes más pequeñas y manejables.
Entonces, ¿qué significa esto?
En pocas palabras, un módulo es un archivo javascript que se ha estructurado en un tamaño de archivo más pequeño y manejable.
Aquí hay un artículo sobre MDN Web Docs que entra en mayor detalle:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules
En el siguiente ejemplo, main.js es un archivo javascript que no es un módulo, pero tanto canvas.js como square.js son módulos javascript. Los 3 son archivos javascript, pero canvas y square se dividen en sus propios archivos para que sean más manejables.
Ejemplo:
índice.html
principal.js
módulos/
lienzo.js
cuadrado.js
Aquí hay un enlace al código en Github para el ejemplo anterior: https://github.com/mdn/js-examples/tree/master/modules/basic-modules
Bueno, podemos ponernos muy técnicos aquí.
Un archivo es cualquier cosa en un sistema operativo que puede manejar el almacenamiento de información de IO, de los cuales hay varios tipos, es decir, archivos de texto y directorios. Un directorio es un tipo específico de archivo que permite almacenar otros archivos.
Cuando habla de un "archivo js", es una especie de jerga para "un archivo de texto que tiene una extensión .js y javascript dentro".
En los modernos módulos javascript se utilizan para crear piezas de código modulares más limpiamente separadas y reutilizables, que se pueden exportar e importar a otros módulos (técnicamente archivos). Son como espacios de nombres en otros idiomas (no realmente, pero más o menos), pero cada archivo solo puede tener un único espacio de nombres (módulo).
También puede tener archivos js que no sean módulos, todos los módulos son archivos pero no todos los archivos son módulos.