Tengo un código en un trabajador web que funciona perfectamente localmente, pero tan pronto como construyo e implemento (lo que minimiza el código) ya no funciona.
El código no minimizado se ve así:
const mapSourceCode = (treeNode, mfi, {objectType, types, fileType, templateType}) => { let sourceCodeMap = new Map(); let ownerMap = new Map(); let sourceCodeList = []; let ownerList = []; let mfiMap = new Map(); mfi.forEach(row => mfiMap.set(row.uuid, row)); let sourceCodeObjects = mfi.filter(row => types.includes(row.objectTypeUuid)); if(sourceCodeObjects.length < 1) return {sourceCodeMap, sourceCodeTree: undefined}; try { sourceCodeObjects.forEach(sourceObj => { let owner = findOwner(sourceObj, sourceObj, mfiMap, {...treeNode.data}, objectType);El código minificado es este:
i = function(e, t, n) { var c = n.objectType , o = n.types , i = n.fileType , u = n.templateType , l = new Map , s = new Map , f = [] , p = [] , m = new Map; t.forEach((function(e) { return m.set(e.uuid, e) } )); var h = t.filter((function(e) { return o.includes(e.objectTypeUuid) } )); if (h.length < 1) return { sourceCodeMap: l, sourceCodeTree: void 0 }; try { if (h.forEach((function(n) { var r = a(n, n, m, Object(da)({}, e.data), c); La línea en la que está fallando es {...treeNode.data} en la última línea. El error es ReferenceError: d is not defined
No puedo entender cuál podría ser el problema? Como dije, todo funciona muy bien localmente. Cualquier ayuda es muy apreciada
Encontré el problema, en caso de que alguien se encuentre con lo mismo. Normalmente, cuando usa trabajadores web, necesita decirle a su constructor (paquete web) que construya/compile trabajadores por separado. Estoy usando la configuración predeterminada de crear-reaccionar-aplicación que no da acceso a esa parte del paquete web. a menos que expulse completamente de create-react-app (que actualmente no estoy listo para hacer)
Estoy usando el gancho de reacción llamado useWorker , donde paso la función que quiero asignar al trabajador.
Cuando su código está optimizado y minimizado, los nombres de las variables se reemplazan con nombres más pequeños (en su mayoría, 1 o 2 letras por lo que he visto). Debido a que no tenía cargadores personalizados para cargar mi código de trabajo, usó variables del ámbito global, asumiendo que tendría acceso. Cuando el código se extrajo a un subproceso separado fuera del subproceso principal, ya no tenía acceso a esas variables y, por lo tanto, no funcionaba.
La solución es
const generateFunction = new Function('treeNode', 'mfi', 'types', 'action', generateFunctionString);
Donde la cadena de función de generación era una cadena como: "return a + b"
Luego pasé esa función a mi enlace useWorker:
const [generatorWorker] = useWorker(generateFunction);