ChatGPT解决这个技术问题 Extra ChatGPT

Webpack cant compile ts 3.7 (Optional Chaining, Nullish Coalescing)

I try to use typescript 3.7 features like Optional Chaining, Nullish Coalescing. But webpack gives me an error while transpaling.

app: Module parse failed: Unexpected token (50:40)
app: File was processed with these loaders:
app:  * ../../../node_modules/ts-loader/index.js
app: You may need an additional loader to handle the result of these loaders.
app: | export const Layout = (props) => {
app: |     const regionsResults = useQuery(regionsQuery, { fetchPolicy: 'cache-first' });
app: >     const regions = regionsResults.data?.regions ?? [];
app: |     const userItem = useQuery(usersProfileQuery, { fetchPolicy: 'cache-first' });
app: |     const handleOnClick = (selected) => props.history.push(selected.key);
``

can you post your packages.json file?

b
bmtheo

I changed target: esnext to es2018 in tsconfig.json file. Now it works.

Webpack issue for reference : https://github.com/webpack/webpack/issues/10227


This did not work for me. Webpack still fails with the same error.
Does not work if you are using "foo".matchAll(/o+/g) cause it's a ES2020 feature.
This is ridiculous, but it really works! I even can't figure out how... Optional channing brought to us only since ES2020. ES2018 & ES2019 are both works properly, btw ES2020 is still crashing.
So is the issue that Webpack cannot parse ES2020 code? That sucks.
In tsconfig.json I added "target: "ES2019" " where there was no target attribute. This did the trick.
a
aryzing

Depending on which loader you're using to transiple the code, there are several options available

For ts-loader, you need to make sure the output from typescript is understandable by Webpack. This can be achieved by setting target to ES2018 in tsconfig.json.

For babel-loader, you'll need to make sure babel loads the

@babel/plugin-proposal-nullish-coalescing-operator

@babel/plugin-proposal-optional-chaining

plugins. Note that if you're using preset-env, it may or may not load these plugins depending on your targets or browserlist (ie, won't be loaded if the target env has support for these language features), in which case the only way to guarantee their inclusion is by manually specifying them in the plugins array in babel.config.js,

  plugins: [
    '@babel/plugin-proposal-nullish-coalescing-operator',
    '@babel/plugin-proposal-optional-chaining',
  ],

Is there a reference that says which versions of ECMAScript Webpack can parse? I.e. where does it say Webpack can parse ES2018 but not ES2020?
Webpack uses acorn as its parser (package.json), which determines the language features that are understood
A
Alex Hyriavets

If you're using vs code, probably you should change the local typescript version vs code use.

What TypeScript version is Visual Studio Code using? How to update it?


关注公众号,不定期副业成功案例分享
Follow WeChat

Success story sharing

Want to stay one step ahead of the latest teleworks?

Subscribe Now