Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Fix] Don't compress chunks in terser because it breaks the compiled code of some Node modules #480

Merged
merged 1 commit into from
May 1, 2024

Conversation

SebastienTainon
Copy link
Collaborator

@SebastienTainon SebastienTainon commented May 1, 2024

Contexte :

Dans la lib de proxy proxy-compare, il y a cette fonction :

export const trackMemo = (obj: unknown) => {
  if (isObjectToTrack(obj)) {
    return Symbol() in obj;
  }
  return false;
};

En environnement de production, elle est compilée (en gros) en :

 export const trackMemo = (obj: unknown) => {
  return !!isObjectToTrack(obj);
};

La différence, c'est qu'il n'y a pas le ... in ... qui est effectué. Et c'est ce tout petit truc qui fait que y'a un comportement différent en prod. Car en fait ce "in" va logger un appel au handler has du proxy JavaScript d'un objet memoisé, et donc la lib de memoisation va détecter une utilisation de l'objet, et donc va mettre à jour son cache de la version de l'objet qu'elle avait, et donc récupérer une nouvelle version - la bonne - de l'objet, en l'occurence le tableau des test de la tâche. Alors qu'en production, il n'y a pas cet appel au in, donc pas d'appel au handler du proxy, donc la lib de memoisation ne logge pas d'utilisation de l'objet donc pas de mise à jour du cache donc utilisation d'une version erronée de l'objet donc mauvaise liste de tests.

Le compilateur convertit automatiquement Symbol() in obj en true.

En désactivant précisément l'option compress.unused de Terser, ce problème de compilation est résolu.

@SebastienTainon SebastienTainon merged commit 2df2efc into master May 1, 2024
4 checks passed
@SebastienTainon SebastienTainon deleted the fix-compilation-issue branch May 1, 2024 21:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant