2015-10-02 21 views
5

Trong C#, bạn có thể làm #if DEBUG ... để làm điều gì đó đặc biệt khi gỡ lỗi. Tôi muốn làm một điều tương tự trong Typescript để tôi có thể thiết lập các giá trị biểu mẫu khi thử nghiệm.Preprocessor xác định trong Typescript

Bất kỳ ai có bất kỳ đề xuất nào về cách triển khai điều này trong Bản đánh máy?

Điều tốt nhất tôi đã đưa ra là một lớp cài đặt:

export class Settings { 
    static isDebugging = false; 
}; 

Sau đó, khi bắt đầu ứng dụng, tôi đặt nó là sự thật.

Sau đó, trong mã, tôi nhập lớp và kiểm tra xem nó có đúng hay không.

if (Settings.isDebugging)... 

Dường như hoạt động tốt.

Trả lời

1

Nếu bạn muốn đạt được điều gì đó tương tự như #if chỉ thị từ C#, thì bạn sẽ phải tạo một thứ gì đó chặn mã nhất định khi ứng dụng của bạn được tạo.

Để làm điều đó, có một số plugin xây dựng mà bạn có thể sử dụng. Có một số xây dựng bổ sung (xem herehere) sẽ tước mã đó là trong ý kiến ​​như thế này ở thời gian xây dựng:

/* test-code */ 
removeMeInProduction(); 
/* end-test-code */ 

Tuy nhiên, bằng cách sử dụng các plugin bạn có thể làm cho một sai lầm trong chính tả của test-code hoặc end-test-code khiến bạn để lại mã kiểm tra trong quá trình sản xuất. Bạn sẽ không nhận được một lỗi biên dịch về nó.

Vì lý do này, có thể tốt hơn nếu bạn tìm một plugin xây dựng có chức năng dựa trên tên của nó (xem here —không may là tôi không thể tìm thấy plugin gulp cho việc này). Bằng cách đó bạn có thể viết một cái gì đó như thế này:

function ifNotProduction(func:() => void) { 
    func(); 
} 

Sau đó sử dụng nó:

ifNotProduction(() => { 
    console.log("Only run when test."); 
}); 

Và sau đó cho xây dựng kịch bản để loại bỏ việc sử dụng các chức năng đó khi nó không phải là một xây dựng sản xuất.

Nhìn chung, giải pháp đơn giản của bạn chỉ cần kiểm tra boolean là đủ tốt.

2

Các cờ như #if DEBUG không có sẵn trong TypeScript vì đầu ra biên dịch luôn giống nhau. Trong C# khi bạn biên dịch sang chế độ gỡ lỗi, các tệp DLL bao gồm một số thông tin bổ sung để gỡ lỗi. Trong chế độ phát hành mà thông tin bị bỏ qua và các tệp DLL nhẹ hơn.

Nếu bạn đang sử dụng một môi trường xây dựng tự động như Gulp hoặc Grunt bạn có thể lưu trữ các thiết lập của bạn dưới một thư mục như /config/debug/config.ts/config/release/config.ts sau đó bạn có thể tạo hai nhiệm vụ:

Một cho debug:

$ gulp bundle-debug 

Và một bản phát hành

$ gulp bundle-release 

Để sao chép một tệp này hoặc tệp khác.

+1

Đây cũng là một câu trả lời hay. –

1

Có mã sẽ thêm hỗ trợ cho các chỉ thị tiền xử lý thành nguyên cảo: https://github.com/Microsoft/TypeScript/issues/4691

Tuy nhiên nó đang được thảo luận nếu nó sẽ trở thành một phần của nguyên cảo thích hợp. Cho đến lúc này, cách giải quyết hầu hết là sử dụng các công cụ xây dựng bên ngoài hoặc các tùy chọn cấu hình khác nhau (mã dải tại thời gian biên dịch) và các biến ma thuật (chỉ tắt đường dẫn mã thời gian)

Các vấn đề liên quan