https://github.com/brandon-leapyear/rollup-optional-chaining-repro
Aus README kopiert:
yarn rollup -c
Entkommentieren Sie die Zeile
"target": "esnext"
intsconfig.json
, um den Fehler anzuzeigen: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)
Scheint ein
rollup-plugin-typescript2
Fehler zu sein, denn mit"target": "esnext"
unkommentiert,yarn tsc --noEmit
funktioniert immer noch (zB Typescript parst es gut).
Sollte nicht relevant sein
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"
}
}
Typescript transpiliert a?.b
zu (_a = a) === null || _a === void 0 ? void 0 : _a.b
wenn es2015
(Standard) verwendet wird.
Es transpiliert a?.b
zu a?.b
wenn esnext
verwendet wird. Ich denke, dies ist eine native JS-Funktion in esnext,
Der angezeigte Fehler besteht darin, dass das Rollup dies nicht analysieren kann. (nicht sicher, ob sie es unterstützen sollen oder nicht).
Sie können dies überprüfen, indem Sie tsc
ausführen, index.js ausgeben und dann die js-Datei als Rollup-Eingabe verwenden. Sie sollten den gleichen Fehler erhalten.
Ich glaube nicht, dass das der Fall ist. Nachdem "target": "esnext"
auskommentiert und yarn tsc index.ts
, enthält index.js
:
var _a;
var a = {};
console.log((_a = a) === null || _a === void 0 ? void 0 : _a.b);
( yarn rollup -c
schlägt immer noch fehl)
Hm, passiert bei mir nicht, ich verstehe
const a = {};
console.log(a?.b);
Überprüfen Sie, ob Ihre Typoskriptversion Ihrer Meinung nach entspricht (vielleicht bringt Garn eine globale Version auf den Markt?):
.\node_modules\.bin\tsc --version
Version 3.7.2
Ich habe das gleiche Problem mit dem Ziel "esnext" und der optionalen Verkettung. Gibt es schon eine Lösung? Alles kompiliert mit tsc
@dagda1 Dies ist kein Fehler - dies ist
@ezolenko ist dies immer noch der Fall, dass die zusätzlichen Babel-Plugins für das Rollup und die optionale Verkettung erforderlich sind?
Soweit ich weiß, können Sie es mit der neuesten Rollup-Version versuchen und sehen, ob es funktioniert (wenn etwas behoben ist, wäre es auf der Rollup-Seite oder in einer seiner Abhängigkeiten).