https://github.com/brandon-leapyear/rollup-optional-chaining-repro
Copiado do README:
yarn rollup -c
Remova o comentário da linha
"target": "esnext"
emtsconfig.json
para mostrar o erro:index.ts: (3:57) [!] Error: Unexpected token (Note that you need plugins to import files that are not JavaScript) index.ts (3:57) 1: import React from 'react' 2: 3: const a: { b?: string } = {} ^ 4: 5: export default () => <span>{a?.b}</span> Error: Unexpected token (Note that you need plugins to import files that are not JavaScript) at error (/Users/bchinn/Desktop/rollup-example/node_modules/rollup/dist/rollup.js:5351:30) at Module.error (/Users/bchinn/Desktop/rollup-example/node_modules/rollup/dist/rollup.js:9643:9) at tryParse (/Users/bchinn/Desktop/rollup-example/node_modules/rollup/dist/rollup.js:9552:16) at Module.setSource (/Users/bchinn/Desktop/rollup-example/node_modules/rollup/dist/rollup.js:9868:33) at /Users/bchinn/Desktop/rollup-example/node_modules/rollup/dist/rollup.js:12148:20 at async Promise.all (index 0) at async Promise.all (index 0) at async Promise.all (index 0)
Parece ser um bug de
rollup-plugin-typescript2
porque com"target": "esnext"
não comentado,yarn tsc --noEmit
ainda funciona (por exemplo, o Typescript o analisa bem).
Não deve ser relevante
import typescript from 'rollup-plugin-typescript2'
export default {
input: 'index.ts',
output: [
{
file: 'dist/index.js',
format: 'es',
},
],
plugins: [
typescript({
typescript: require('typescript'),
})
],
}
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"jsx": "react",
// Uncomment to break:
// "target": "esnext",
}
}
{
"name": "rollup-optional-chaining-repro",
"version": "0.0.1",
"private": true,
"devDependencies": {
"rollup": "^1.27.0",
"rollup-plugin-typescript2": "^0.25.2"
},
"dependencies": {
"typescript": "^3.7.2"
}
}
O texto datilografado transpila a?.b
para (_a = a) === null || _a === void 0 ? void 0 : _a.b
quando es2015
(padrão) é usado.
Ele transpila a?.b
para a?.b
quando esnext
é usado. Eu acho que este é um recurso nativo de JS em esnext,
O erro que você vê é o rollup falhando ao analisar isso. (não tenho certeza se eles devem apoiá-lo ou não).
Você pode verificar executando tsc
, fazendo com que ele emita index.js e usando o arquivo js como entrada de rollup. Você deve obter o mesmo erro.
Não acho que seja o caso. Após descomentar "target": "esnext"
e executar yarn tsc index.ts
, index.js
contém:
var _a;
var a = {};
console.log((_a = a) === null || _a === void 0 ? void 0 : _a.b);
( yarn rollup -c
ainda falha)
Hm, não acontece para mim, eu entendo
const a = {};
console.log(a?.b);
Verifique se a sua versão datilografada é o que você pensa que é (talvez o yarn lance a versão global?):
.\node_modules\.bin\tsc --version
Version 3.7.2
Tenho o mesmo problema com o destino "esnext" e o encadeamento opcional. Existe uma correção ainda? Tudo compila com tsc
@ dagda1 este não é um bug - este é um
@ezolenko ainda é o caso em que os plug-ins extras do babel são necessários para rollup e encadeamento opcional?
Pelo que eu sei, sim, você pode tentar a versão mais recente do rollup e ver se funciona (se algo for corrigido, seria no lado do rollup ou em uma de suas dependências).