Cài đặt typeScript tsconfig cho Node.js 12?


Câu trả lời:


44

Kể từ Node.js 12.0.0, 100% ES2019 được hỗ trợ. Nếu bạn biết rằng bạn đang nhắm mục tiêu phiên bản đó hoặc mới hơn, cấu hình tối ưu sẽ như thế này:

  • "module": "commonjs"

    Node.js đang trên đường thêm ES-Modules, nhưng bây giờ chúng ta sẽ phải gắn bó với CommonJS.

  • "target": "es2019"

    Điều này cho TypeScript biết rằng bạn có thể xuất cú pháp JavaScript với các tính năng từ ES2019. Trong thực tế, điều này có nghĩa là nó sẽ ví dụ đầu ra các thuộc tính nghỉ / trải rộng đối tượng & async / await cú pháp thay vì nhúng một polyfill.

  • "lib": ["es2019", "es2020.bigint", "es2020.string", "es2020.symbol.wellknown"]

    Điều này cho TypeScript biết rằng bạn có thể sử dụng các hàm và thuộc tính được giới thiệu trong ES2019 trở về trước. Trong thực tế, điều này có nghĩa là bạn có thể sử dụng ví dụ String.prototype.trimStartvà Array.prototype.flat.

    Ngoài ES2019, Node.js 12 cũng hỗ trợ BigInt& matchAlltừ ES2020, do đó chúng tôi bao gồm các định nghĩa bổ sung từ ES2020.

Cấu hình đầy đủ do đó sẽ là:

{
  "compilerOptions": {
    "lib": ["es2019", "es2020.bigint", "es2020.string", "es2020.symbol.wellknown"],
    "module": "commonjs",
    "target": "es2019"
  }
}

Nếu bạn đang nhắm mục tiêu Node.js 12.9.0hoặc mới hơn , bạn chỉ cần chỉ định "lib": ["es2020"]vì phiên bản đó hỗ trợ tất cả các chức năng và thuộc tính mới được giới thiệu trong ES2020. Nó không hỗ trợ cú pháp JavaScript mới , vì vậy bạn vẫn phải tiếp tục "target": "es2019".

Cấu hình đầy đủ do đó sẽ là:

{
  "compilerOptions": {
    "lib": ["es2020"],
    "module": "commonjs",
    "target": "es2019"
  }
}

Nếu bạn đang chạy Node.js 14, bạn có thể thấy câu trả lời tương tự của tôi cho Node.js 14 tại đây

Nếu bạn đang chạy Node.js 10, bạn có thể thấy câu trả lời tương tự của tôi cho Node.js 10 tại đây

Nếu bạn đang chạy Node.js 8, bạn có thể thấy câu trả lời tương tự của tôi cho Node.js 8 tại đây


Có "target"ảnh hưởng "lib"theo bất kỳ cách nào nếu "lib"bị bỏ trống trong cấu hình? Nếu tôi chỉ có "target": "es2020"những gì "lib"mặc định? Điều này luôn luôn là một nguồn bí ẩn đối với tôi.
— Sumomo

@Sumomo câu trả lời này ( stackoverflow.com/a/50987516/148072 ) cung cấp một chút cái nhìn sâu sắc. Mặc dù tôi không tìm thấy thêm thông tin nào về những gì mới hơn "ES6" cung cấp cho lib mặc định ...
— Linus Unnebäck

1
Hiện tại cũng có es2020.promise được hỗ trợ bắt đầu từ Nút 12.10.0.
— Ivan Yarych

1
@IvanYarych phần dưới cùng trong câu trả lời của tôi có một phần dành cho Node.js> = 12.9.0, bao gồm es2020 , lần lượt bao gồm es2020.promise
— Linus Unnebäck
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.