survivejs / webpack-book

From apprentice to master (CC BY-NC-ND)
https://survivejs.com/webpack/
2.42k stars 319 forks source link

dynamic import about terser error #344

Closed heart-er closed 3 years ago

heart-er commented 3 years ago

when i add dynamic import in component.js image

it throws error image

bebraw commented 3 years ago

Can you push your project to GitHub so I can have a closer look? It feels like something in Babel configuration.

I have a reference implementation at https://github.com/survivejs-demos/webpack-demo .

heart-er commented 3 years ago

Yes, when I added the "targets: { "esmodules": true } "in the babel file, the error disappeared image

heart-er commented 3 years ago

https://github.com/babel/babel/issues/9849

heart-er commented 3 years ago

https://github.com/heart-er/test-webpack

This is my webpack, please help me to check if I can remove target modules in babel

bebraw commented 3 years ago

I know "modules": false is important for webpack but the targets bit is new to me. I wonder if something has changed there in the past months. Let me verify and get back to you latest tomorrow.

bebraw commented 3 years ago

I tried out your project. If I reduce the configuration to the following it still works:

{
    "presets": [
        [
            "@babel/preset-env",
            {
                "modules": false
            }
        ]
    ]
}

That "modules": false bit is crucial as otherwise webpack won't be able to use tree shaking properly.

Can you push code that's leading to the error in your repository?

heart-er commented 3 years ago

The development environment is fine, but if you execute npm run build, it will throw an error.

heart-er commented 3 years ago

you can remove target within my repository and excute npm run build.

bebraw commented 3 years ago

Ok, I see now. I can reproduce the issue if I empty your .browserslistrc.

The problem has to do with Terser and its capabilities in minifying the code. It's crashing as it cannot deal with the syntax. It can be something as simple as a trailing comma.

Here's more information: https://github.com/webpack-contrib/terser-webpack-plugin/issues/114 . It's possible setting the ecma option to 8 at terser options (see the minifying chapter) could resolve the issue if you want to compile for the most modern browsers only (I assume removing targets from browserslistrc is doing this exactly).

heart-er commented 3 years ago

So, if I remove the target, it needs to be compatible with the old browser, what should I do?

bebraw commented 3 years ago

Which browsers do you want to target?

On 03.03.2021, at 12:08, heart notifications@github.com wrote:

 So, if I remove the target, it needs to be compatible with the old browser, what should I do?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

heart-er commented 3 years ago

Which browsers do you want to target? On 03.03.2021, at 12:08, heart @.***> wrote:  So, if I remove the target, it needs to be compatible with the old browser, what should I do? — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

IE 10 +

bebraw commented 3 years ago

Ok, in that case it's enough to set .browserslistrc like this:

IE >= 10

I checked with your build command and it compiles now with this.

heart-er commented 3 years ago

Thank you very much!

bebraw commented 3 years ago

Cool, let's close?

heart-er commented 3 years ago

Ok