diff --git a/lib/ConstPlugin.js b/lib/ConstPlugin.js index 8952e7ff077..164b840dab2 100644 --- a/lib/ConstPlugin.js +++ b/lib/ConstPlugin.js @@ -279,7 +279,15 @@ class ConstPlugin { (expression.operator === "||" && !bool); if (param.isBoolean() || keepRight) { - const dep = new ConstDependency(`${bool}`, param.range); + // for case like + // + // return'development'===process.env.NODE_ENV&&'foo' + // + // we need a space before the bool to prevent result like + // + // returnfalse&&'foo' + // + const dep = new ConstDependency(` ${bool}`, param.range); dep.loc = expression.loc; parser.state.current.addDependency(dep); } else { diff --git a/test/cases/parsing/evaluate/index.js b/test/cases/parsing/evaluate/index.js index 7fd4313d049..04ace9ffa11 100644 --- a/test/cases/parsing/evaluate/index.js +++ b/test/cases/parsing/evaluate/index.js @@ -11,12 +11,15 @@ it("should evaluate logical expression", function() { var value4 = typeof require !== "function" && require("fail"); var value5 = "hello" && (() => "value5")(); var value6 = "" || (() => "value6")(); + var value7 = (function () { return'value7'===typeof 'value7'&&'value7'})(); + expect(value1).toBe("hello"); expect(value2).toBe(true); expect(value3).toBe(""); expect(value4).toBe(false); expect(value5).toBe("value5"); expect(value6).toBe("value6"); + expect(value7).toBe(false); }); if("shouldn't evaluate expression", function() {