trullock / NUglify

NUglify is a HTML, JavaScript and CSS minification Library for .NET (fork of AjaxMin + new features)
Other
394 stars 78 forks source link

Lexical declaration cannot appear in a single-statement context #399

Open oljbo opened 1 month ago

oljbo commented 1 month ago

c# code is:

var jscode = @"
function fun(item){
    if (createmode == true) {
        let a = 'a';
        var b = 'b';
        if(a && b != null ) {
            let Maker = 'c';
            let obj = {a:a,Closed:1,Closer:Maker,CloseDate:new Date()};
            let rejust= null;
        }
    }
}

var createmode = true;
fun(null); 
";
var s1 = Uglify.Js(jscode, new NUglify.JavaScript.CodeSettings() { }).Code;

ths result is: function fun(){if(createmode==!0){let t="a";var n="b";if(t&&n!=null)let n={a:t,Closed:1,Closer:"c",CloseDate:new Date}}}var createmode=!0;fun(null)

when I run the result in brower, It's has error: SyntaxError: Lexical declaration cannot appear in a single-statement context

trullock commented 1 month ago

The issue is its outputting

if(predicate)
    let x = something

which is invalid.

As a workaround you can try,

1) use var if possible, but beware scope hoisting 2) the above code doesnt really make sense anyway, youre declaring something but not using it. You can probably avoid this issue just by refactoring a bit