C'est le début de l'obfuscation qui intervient avant la mise en production.
La fonction prend en argument le string contenant le code, elle retourne le string sans commentaires.
Comme les commentaires peuvent être inclus dans un string, la fonction reconnait les strings (guillemets, apostrophes, backticks) et prend aussi en compte les caractères spéciaux \' \" \` inclus dans un string, en particulier \\ puisque '\\' est une chaîne valide.
Version de développement
<script> function $(s) { console.log(s); } function enleverCommentaires(s) { let chars = '"`\''; // guillemet, backtick, apostrophe let com=false, multi=false, string=false; let a=''; for (let n=0; n<s.length; n++) { $(s[n]); if(!string && s[n]=='/') { $('\tslash'); if(s[n+1]=='/') {$('\tdouble-slash com=1'); com=true;} else if(s[n+1]=='*') {$('\tmulti=1'); multi=true;} else if(s[n-1]=='*') {$('\tmulti=0'); multi=false;} } else if(s[n]=='\n' && com) {$('\tcom=0'); com=false;} // si " ' ou ` ouvre ou ou ferme un string, si celui d'avant !\ else if(s[n-1]!='\\' && s[n-2]!='\\' && chars.indexOf(s[n])!=-1) { string = !string; $('\tstring:'+string); a=a+s[n]; } else if(!com && !multi) a=a+s[n]; } return a; } let s = `"use strict"; //un commentaire let b = "un//com dans un string"; let a = 0; /*commentaire multiligne*/`; document.write('<pre>'+s+'</pre><pre>'+enleverCommentaires(s)+'</pre>'); </script>Ce qui donne: La console elle ressemble à Matrix avec sa colonne de lettres.
Version sans console.log: se rapproche de la prod. Il y a des commentaires
<script> function enleverCommentaires(s) { let chars = '"`\''; // guillemet, backtick, apostrophe let com=false, multi=false, string=false; let a=''; for (let n=0; n<s.length; n++) { if(!string && s[n]=='/') { if(s[n+1]=='/') com=true; else if(s[n+1]=='*') multi=true; else if(s[n-1]=='*') multi=false; } else if(s[n]=='\n' && com) com=false; // si " ' ou ` ouvre ou ou ferme un string, si celui d'avant !\ else if(s[n-1]!='\\' && s[n-2]!='\\' && chars.indexOf(s[n])!=-1) { string = !string; a=a+s[n]; } else if(!com && !multi) a=a+s[n]; } return a; } let s = `"use strict"; //un commentaire let b = "un//com dans un string"; let a = 0; /*commentaire multiligne*/`; document.write('<pre>'+s+'</pre><pre>'+enleverCommentaires(s)+'</pre>'); </script>