Las cosas funcionan bien cuando hago un proyecto independiente con dos archivos, uno llamado helperFuncs.js y el otro llamado index.js, donde helperfuncs.js tiene
function stringOfZeros(numZeros) { //takes in a number and outputs a string with that many zeros; ... } module.exports = { stringOfZeros: stringOfZeros, }e index.js tiene
const helperFuncs = require("./helperFuncs.js"); const stringOfZeros=helperFuncs.stringOfZeros; let myZeroString = stringOfZeros(17); console.log(myZeroString);Esto funciona incluso sin un archivo package.json en el proyecto.
Sin embargo, si hago lo mismo donde creo un archivo helperFuncs.js idéntico en un pequeño proyecto HTML que tiene una página index.html y un archivo script.js en el mismo nivel en el directorio, y configuro las líneas anteriores de código del archivo index.js en el archivo script.js donde las líneas se ejecutan dentro de un detector de carga de eventos de ventana que de otra manera funciona, aparece este error:
TypeError: stringOfZeros no es una función
¿Qué estoy haciendo mal? ¿El hecho de que esté dentro de un archivo de secuencia de comandos de alguna manera requiere que use "importar" en lugar de requerir, o hace que sea obligatorio crear un archivo package.json donde, de lo contrario, sería opcional?
Parece que está intentando ejecutar un código compatible con Node JS en un navegador.
Actualmente, los navegadores no admiten este tipo de sintaxis de importación/exportación. Para usar el código anterior para aplicaciones web, necesita herramientas especiales adicionales que reconstruirán su código de manera que el navegador lo entienda.
Te recomiendo que pruebes estas herramientas:
Los navegadores web no admiten módulos CommonJS ni cjs. En cambio, lo que está buscando son módulos ES o esm.
Es común que los módulos en los sitios web de producción se empaqueten en un solo archivo javascript con un paquete. Esto le permite usar cualquier tipo de módulo que desee y puede aplicar transformaciones a su código, como minimizarlo o agregar soporte para navegadores más antiguos.
Si desea escribir su código y ejecutarlo directamente sin un paquete. Debe utilizar módulos ES. Puedes encontrar mucha información en esta página . Pero en tu caso sería algo como esto:
export function stringOfZeros(numZeros) { } import {stringOfZeros} from "./helperFuncs.js"; let myZeroString = stringOfZeros(17); console.log(myZeroString); Luego puede cargar su index.js en su html con la etiqueta de type configurada en module de esta manera:
<script src="index.js" type="module"></script>