GithubHelp home page GithubHelp logo

Comments (7)

Danielku15 avatar Danielku15 commented on April 29, 2024 2

Yes, I will try to open a PR soon. Should be there the next few days latest. Locally solution 1 worked fine for me. But have to check all unit tests first.

from webpack.

alexander-akait avatar alexander-akait commented on April 29, 2024 1

Feel free to send a PR, we have a lot of tests, so we will catch potential problems

from webpack.

Danielku15 avatar Danielku15 commented on April 29, 2024

I found something suspicious which might allow an easy fix:

  1. Various top level symbols are marked by the InnerGraphPlugin:
    const fn = InnerGraph.tagTopLevelSymbol(parser, name);
  2. The InnerGraph.tagTopLevelSymbol first defines a variable in the parser with the name and then additionally tags the variable with the top level symbol.
    parser.defineVariable(name);
    const existingTag = /** @type {TopLevelSymbol} */ (
    parser.getTagData(name, topLevelSymbolTag)
    );
    if (existingTag) {
    return existingTag;
    }
    const fn = new TopLevelSymbol(name);
    parser.tagVariable(name, topLevelSymbolTag, fn);
  3. The problem:
    1. parser.defineVariable adds a variable with the current scope as value.
    2. parser.tagVariable also defines a variable but with the correct top level symbol as value. But as there is already a VariableInfo registered from defineVariable resulting in the name not to be set

I see two potential fixes in this code path:

  1. In InnerGraph.tagTopLevelSymbol we remove the call to parser.defineVariable. (or move it into the if-statement when a tag already exists).
    • Feels like the safer option as the change is quite isolated and just ensures we do not double-define the variable with missing info.
  2. In JavaScriptParser.tagVariable we fill the name we know instead of true into the VariableInfo.
    • It seems the old name was used before and things were refactored as part of ec51894 I'm not so sure about the impact of this change.

from webpack.

alexander-akait avatar alexander-akait commented on April 29, 2024

Just looked at the reproducible test repo, yeah, we need to fix it, because other plugins can be broken, it can work for the development mode, but broken for the production mode, it is a critical issue... Will you look at this?

from webpack.

Danielku15 avatar Danielku15 commented on April 29, 2024

Made a proposal for fixing the problem. I'm willing to contribute the change as an individual developer but I'm a bit reluctant to provide so many personal details (e.g. mailing address) in the EasyCLA to just contribute some code to this project.

from webpack.

VivekShahare04 avatar VivekShahare04 commented on April 29, 2024

I wanted to resolve this issue

from webpack.

VivekShahare04 avatar VivekShahare04 commented on April 29, 2024

see if we directly adjust the hook registration logic to work with identifiers ,
(node:8984) [DEP_WEBPACK_COMPILATION_NORMAL_MODULE_LOADER_HOOK] DeprecationWarning: Compilation.hooks.normalModuleLoader was moved to NormalModule.getCompilationHooks(compilation).loader

it will give you just deprecation warning ,so if incase we adjust it so that we're tapping into the expression hook for the "new" keyword. Then, we check if the argument to new is an identifier (assuming it's a simple class name without further qualification) and directly check if it matches "NotWorkingClass"
This approach circumvents the need for the parser to fill freeName correctly and directly handles the class name. Try this adjustment in your code to see if it resolves the issue with NotWorkingClass expressions not triggering the hook.

I am going to attach my piece of code......
Screenshot (44)

tell me if it helps you if not then we will work on this issue more

from webpack.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.