tsconfigCài đặt TypeScript tối ưu để xuất mã sẽ chạy trên Node.js 12 là gì?
tsconfigCài đặt TypeScript tối ưu để xuất mã sẽ chạy trên Node.js 12 là gì?
Câu trả lời:
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
"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.