Pertanyaan TypeScript: kompilasi menghapus impor yang tidak direferensikan


Dalam proyek kami, kami menggunakan RequireJS sebagai loader modul kami. Beberapa modul kami akan mempengaruhi perpustakaan global, dan karenanya tidak akan langsung digunakan dalam modul yang menjadi referensi mereka.

Contoh:

define(['definitely/goingto/usethis/','just/referencingthis/forpackaging'], function(useThis) {
    useThis.likeIPromised();

    // the following call can only be made when the second required file is available
    someGlobalAvailableVariable.someMethod();
});

Ini berfungsi seperti yang diharapkan ketika menulis modul saya di JavaScript. Namun, kami menerjemahkan proyek kami langkah demi langkah ke TypeScript. Berdasarkan contoh di atas, ini menghasilkan:

import useThis = module("definitely/goingto/usethis/");
import whatever = module("just/referencingthis/forpackaging");

useThis.likeIPromised();

// I've written a definition file so the following statement will evaluate
someGlobalAvailableVariable.someMethod();

Dan ketika mengkompilasi ini ke JavaScript, compiler ingin membantu dan menghapus impor yang tidak digunakan. Dengan demikian, ini melanggar kode saya, menyebabkan modul impor kedua tidak tersedia.

Pekerjaan saya saat ini adalah memasukkan tugas yang berlebihan, tetapi ini terlihat jelek:

import whatever = module("just/referencingthis/forpackaging");
var a = whatever; // a is never ever used further down this module

Apakah ada yang tahu apakah mungkin untuk mengkonfigurasi compiler TypeScript untuk tidak mengoptimalkan modul selama kompilasi?


32
2018-03-07 09:40


asal


Jawaban:


Solusi yang lebih baik (diuji dengan TS 1.8):

import 'just/referencingthis/forpackaging';

The triple-slash-directive-ketergantungan tampaknya hanya bekerja jika ada yang lain yang membutuhkan impor; hanya memiliki perintah ketergantungan-amd dalam kompilator TypeScript yang menghasilkan JavaScript sepenuhnya tanpa definisi modul.


7
2018-04-27 16:14



Anda dapat melakukan ini di bagian atas file Anda (bukan import):

/// <amd-dependency path="just/referencingthis/forpackaging" />

26
2018-03-07 17:05