2016-03-18 16 views
1

Kök URL altında konuşlandırıldığı sürece beklendiği gibi çalışan çok basit bir config.js dosyam var.SystemJS relative paths

System.config({ 
    //use typescript for compilation 
    transpiler: 'typescript', 
    //typescript compiler options 
    typescriptOptions: { 
    emitDecoratorMetadata: true 
    }, 
    //map tells the System loader where to look for things 
    map: { 
     app: "./src", 
    }, 
    //packages defines our app package 
    packages: { 
    app: { 
     main: './app.ts', 
     defaultExtension: 'ts' 
    } 
    } 
}); 

Elveda bu dosya kök yoluna <script src="/config.js"> yüklenen ve yerleri
http://localhost/config.js ve http://localhost/src/app.ts vardır gibi tüm iyi çalışır: Burada örnek config.js dosyasıdır.

şimdi daha derin bir dizine config.js dosya taşımak ve onu gibi yüklemeye çalışıyorum: <script src="https://stackoverflow.com/a/b/c/d/e/config.js"> ama bunu yaparsam o zaman sabit bir şekilde kodlama gibi config.js dosyanın kendisinde yolunu gerekir:

//map tells the System loader where to look for things 
    map: { 
     app: "./a/b/c/d/e/src", 
    }, 

Tüm yolun tamamını config.js dosyasında yeniden kodlamak mümkün mü? Önde gelen ./'un "göreceli" anlamına geldiğini düşünürdüm ama değil. Tam yolu tekrar kodlamıyorsam, işe yaramıyor. Göreli konumu belirtmek için bir sözdizimi nedir (veya var mı?)

cevap

5

'./', göreli anlamına gelir, ancak yüklendiyse js dosyanızın bulunduğu 'içerik' ile ilişkilidir. Kök klasörde bulunan index.html gibi sayfanın içine yüklediğinizi kabul ediyorum - bu sizin 'bağlamınız' ve tüm yollar ona göre olacaktır. Bu nedenle, config.js'yi başka bir kök olmayan konuma taşıyarak ve sonra da kök html sayfasına yükleyerek - kök klasörü olmaya devam eden bağlamını değiştirmez, src dosyalarının yeri değişmiştir ve şimdi sağlamaya zorlanırsınız. config.js'nizde bunlara yeni yollar.

Kolaylaştırmak için systemjs baseURL özelliğini kullanabilirsiniz. Daha sonra, her paket için onları yeniden yazmaya gerek kalmadan sadece bir yerde yolu değiştirmeniz gerekecektir.

+0

Cevabınız için teşekkürler. Bu 'içerik' davranışı benim için bir sürpriz (JS'yi ayarlamak için HTML yolunu (index.html) kullanarak), HTML ve JS dosyalarının aynı direcories içinde toplandığını varsayar. Benim durumumda değil, bu bir REST türü uygulamasıdır, burada HTML dosyaları bir alanda JS dosyaları bir diğerinde yaşar, bu yüzden bir küme için dizin yolları diğeri için aynı oldukları varsayılabilir. Bahsettiğiniz baseURL'e bakacağım, aksi takdirde değerleri kodlamam gerekecek. –

İlgili konular