2017-02-21 45 views
6

şu dizin yapısı ile basit typescript projeyi düşünün:Nasıl baseUrl kullanarak Modüller alınırken Mutlak Yolları Çözmek için tsc almak için?

| package.json 
| tsconfig.json 
|    
\---src 
    | app.ts 
    | 
    \---foobar 
      Foo.ts 
      Bar.ts 

tsconfig.json./src/baseUrl olmak için yapılandırıldı.

{ 
    "compilerOptions": { 
     "module": "commonjs", 
     "target": "es6", 
     "noImplicitAny": true, 
     "removeComments": true, 
     "preserveConstEnums": true, 
     "outDir": "./dist/", 
     "baseUrl": "./src/" 
    }, 
    "include": [ 
     "./src/**/*" 
    ], 
    "exclude": [ 
     "node_modules" 
    ] 
} 

Şimdi Bar.ts içinde Foo almak istediğiniz varsayalım. Benim anlayış göreli yollar

import { Foo } from './Foo' 

benim anlayış doğru ise, typescript derleyici gerekir aksine baseUrl ayarlayarak, şimdi modülleri

import { Foo } from 'foobar/Foo' 

ithal etmek mutlak yolları kullanacak olmasıdır Bar.ts derlenirken 'u ./Foo'a otomatik olarak çözümleyin.

import { Foo } from 'foobar/Foo'; 

export class Bar { 
    foo: Foo; 

    constructor(num: number) { 
    this.foo = new Foo(num); 
    } 
} 

Çalışıyor tsc hata olmadan derler. Yine de, biz aslında Bar.js derlenmiş baktığımızda, yolun doğru bir şekilde çözülmediğini göreceğiz, bu bize verecektik, eğer biz çalıştırırsak hata modülünü bulamıyoruz.

"use strict"; 
const Foo_1 = require("foobar/Foo"); 
class Bar { 
    constructor(num) { 
     this.foo = new Foo_1.Foo(num); 
    } 
} 
exports.Bar = Bar; 

Yani benim soru: baseUrl kullanarak modülleri aktarırken ben tsc doğru mutlak yolları çözmek için alabilirim? Ya da bu yapılabilecek bir şey değilse, o zaman baseUrl'un amacı nedir?

cevap

1

Sorun, modül yükleyicinizin foobar/Foo mutlak yolunu verilen modülü nasıl bulacağını bilmemesidir.

TypeScript derleyicisi (tsc), modül yollarını doğru şekilde çözüyor, aksi halde derleme hataları alırsınız. Ancak, modül yükleyicinizi uygun şekilde yapılandırmanız size güvenmektedir. documentation for RequireJS dan Örneğin

:

Desteklenen yapılandırma seçenekleri:

baseURL: Kök yolu tüm modül aramalarının için kullanılacak.

typescript documentation Eğer baseUrl gerekebilir neden hakkında biraz konuşur: Bir baseURL kullanma

modülleri a “konuşlandırılmış” AMD modül yükleyiciler kullanarak uygulamalarında yaygın bir uygulamadır çalışma zamanında tek klasör. Bu modüllerin kaynakları farklı dizinlerde yaşayabilir, ancak bir derleme betiği hepsini bir araya getirecektir.

+1

Teşekkürler!Başka bir deyişle, 'tsc' mutlak yolun göreceli yola dönüştürülmesinden sorumlu değildir ve bunun yerine modül yükleyicisini bunun yerine çözmesi için yapılandırmam gerekiyor mu? Durum buysa, tsc'yi basitçe göreceli yola dönüştürmek için bir yol var mı? – Zsw

+0

Hayır, bildiğim kadarıyla, 'tsc' sizin için yolları dönüştürmeyecek. Mümkünse, 'import' ifadenizdeki modül yükleyici spec/config'unuza uyan yolların kullanılması daha kolay olacaktır ve sonra 'tsc' modül modlarının buna göre nasıl çözüleceğini söylemek için çeşitli derleyici seçeneklerini kullanın. – Seamus

+1

@Zsw Alternatif olarak, "outFile" derleyici seçeneğini işaretleyin. Modülleri tek bir çıktıda birleştirir: https://github.com/Microsoft/TypeScript/wiki/What%27s-new-in-TypeScript#concatenate-amd-and-system-modules-with---outfile – Seamus