Rollup-plugin-typescript2: Rantai opsional gagal dengan "target": "esnext" di tsconfig

Dibuat pada 15 Nov 2019  ·  7Komentar  ·  Sumber: ezolenko/rollup-plugin-typescript2

Apa yang terjadi dan mengapa itu salah

https://github.com/brandon-leapyear/rollup-optional-chaining-repro

Disalin dari README:

yarn rollup -c

Batalkan komentar pada baris "target": "esnext" di tsconfig.json untuk menampilkan kesalahan:

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)

Tampaknya menjadi bug rollup-plugin-typescript2 karena dengan "target": "esnext"
tidak dikomentari, yarn tsc --noEmit masih berfungsi (mis. TypeScript mem-parsingnya dengan baik).

Lingkungan

Seharusnya tidak relevan

Versi

  • naskah: terbaru
  • rollup: terbaru
  • rollup-plugin-typescript2: terbaru

rollup.config.js

import typescript from 'rollup-plugin-typescript2'

export default {
  input: 'index.ts',
  output: [
    {
      file: 'dist/index.js',
      format: 'es',
    },
  ],
  plugins: [
    typescript({
      typescript: require('typescript'),
    })
  ],
}

tsconfig.json

{
  "compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "jsx": "react",

    // Uncomment to break:
    // "target": "esnext",
  }
}

package.json

{
    "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"
    }
}

keluaran plugin dengan verbositas 3

plugin-debug.txt

Semua 7 komentar

TypeScript mentranspilasikan a?.b ke (_a = a) === null || _a === void 0 ? void 0 : _a.b ketika es2015 (default) digunakan.

Ini mengubah a?.b menjadi a?.b ketika esnext digunakan. Saya kira ini adalah fitur JS asli di esnext,

Kesalahan yang Anda lihat adalah rollup gagal mengurai ini. (tidak yakin apakah mereka seharusnya mendukungnya atau tidak).

Anda dapat memverifikasi dengan menjalankan tsc , membuatnya memancarkan index.js dan kemudian menggunakan file js sebagai input rollup. Anda harus mendapatkan kesalahan yang sama.

Saya tidak berpikir itu masalahnya. Setelah membatalkan komentar "target": "esnext" dan menjalankan yarn tsc index.ts , index.js berisi:

var _a;
var a = {};
console.log((_a = a) === null || _a === void 0 ? void 0 : _a.b);

( yarn rollup -c masih gagal)

Hm, tidak terjadi pada saya, saya mengerti

const a = {};
console.log(a?.b);

Periksa apakah versi TypeScript Anda seperti yang Anda pikirkan (mungkin yarn meluncurkan versi global?):

.\node_modules\.bin\tsc --version
Version 3.7.2

Saya memiliki masalah yang sama dengan target "esnext" dan chaining opsional. Apakah ada perbaikan belum? Semuanya dikompilasi dengan tsc

@dagda1 ini bukan bug -- ini adalah TypeScript yang menghasilkan kode yang benar (untuk target selanjutnya) yang tidak dapat dikonsumsi oleh rollup. Anda dapat menambahkan plugin babel ke dalam rantai jika Anda harus memiliki esnext.

@ezolenko apakah ini masih kasus bahwa plugin babel tambahan diperlukan untuk rollup dan rantai opsional?

Sejauh yang saya tahu ya, Anda dapat mencoba dengan versi rollup terbaru dan melihat apakah itu berfungsi (jika ada yang diperbaiki, itu akan berada di sisi rollup atau di salah satu dependensinya).

Apakah halaman ini membantu?
0 / 5 - 0 peringkat