I play a demo with Vue.js + TypeScript + Parcel, and try async/await
in index.ts .
index.html
<html>
...
<body>
<script src="index.ts"></script>
</body>
</html>
index.ts
console.log('Not see me')
(async () => {
console.log('Did not execute here too.')
})()
Execute parcel index.html
and open the http://localhost:1234/. The console throw the error: regeneratorRuntime is not defined
index.a4a28941.js:110 Uncaught ReferenceError: regeneratorRuntime is not defined
at index.a4a28941.js:110
at Object.parcelRequire.306 (index.ts:3)
at newRequire (index.a4a28941.js:48)
at parcelRequire.306 (index.a4a28941.js:80)
at index.a4a28941.js:106
It seems the async
syntax need the polyfill?
Here is my tsconfig.json:
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"baseUrl": ".",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"jsx": "preserve",
"module": "esnext",
"moduleResolution": "node",
"noImplicitReturns": true,
"sourceMap": true,
"strict": true,
"target": "esnext",
"paths": {
"@/*": ["src/*"]
},
"lib": ["esnext", "esnext.array", "dom", "dom.iterable", "scripthost", "es2015.generator"]
},
"parcelTsPluginOptions": {
// If true type-checking is disabled
"transpileOnly": false
},
"include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue", "tests/**/*.ts", "tests/**/*.tsx"],
"exclude": ["node_modules"]
}
My solution was to set the target
to "es5"
in the tsconfig.json
file:
{
"compilerOptions": {
"target": "es5"
}
}
However it seems like parcel is always using babel to transform javascript and that is causing some clashes with the typescript compiler (see here: https://github.com/parcel-bundler/parcel/issues/954 and here: https://github.com/parcel-bundler/parcel/issues/871). Some guys also solved this problem by requiring babel-polifill
in their projects but this seems not to be the best option if you only want to use the typescript compiler and not having babel transforming anything.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With