2013-06-29 16 views
17

Si supponga che ho due fileBundling typeScript e minification?

AFile.ts

/// <reference path="ZFile.ts" /> 
new Z().Foo(); 

ZFile.ts

class Z 
{ 
    Foo() { } 
} 

C'è un modo per generare tutti gli script in un unico file di js nell'ordine di cui necessita (è necessario ZFile prima del AFile per ottenere la definizione di Z)?

risposta

10

Ora VS tipografico estensione supporta la fusione in un unico file.
Accertarsi di aver installato l'estensione Tools -> Extensions and Updates (VS2015 ha per default)

enter image description here

Vai alla proprietà del progetto e verificare Combine JavaScript output into file: enter image description here

importante avere /// <reference /> (come in questione), aiuta i file di ordini tsc in base alle dipendenze prima dell'unione.


Poi per il fascio di minimizzazione può essere utilizzato come al solito:

bundles.Add(new ScriptBundle("~/bundles/finale").Include("~/js/all.js")); 

e in vista

@Scripts.Render("~/bundles/finale") 
+0

Funzionerà anche con altri tipi di moduli come System? È possibile utilizzare questo invece di caricatori di moduli come webpack o babel, vale a dire. pacchetti di nodi? –

+0

Questa interfaccia utente è disabilitata sulla mia macchina. Qualche idea del perché? – user2173353

+0

Inoltre, questo crea file JS da file TS durante Build. Non c'è un modo per farlo al volo con una configurazione bundle? : ^) – user2173353

4

Utilizzare il parametro --out.

tsc AFile.ts ZFile.ts --out single.js 

Il compilatore dattiloscritto eseguirà automaticamente la navigazione delle dipendenze.

16

Nel eventi post-compilazione ho aggiunto una chiamata a TypeScript compilatore

tsc "..\Content\Scripts\Start.ts" --out "..\Content\Scripts\all.js" 

Nella configurazione fascio ho aggiunto

bundles.Add(new ScriptBundle("~/scripts/all").Include("~/Content/Scripts/all.js")); 

Sulla _Layout.cshtml lima ho aggiunto

@Scripts.Render("~/Scripts/all") 

E con che ho ottenuto

<script src="/Scripts/all?v=vsTcwLvB3b7F7Kv9GO8..."></script> 

Quale è tutto il mio script in un singolo file.


Il compilatore non minify, è necessario utilizzare fasci e compilare il rilascio o impostare

BundleTable.EnableOptimizations = true; 

È inoltre possibile utilizzare minify Essentials Web o afferrare il contenuto e minifing da qualche altra parte.

+0

Come si fa a smettere da automaticly compilare al momento del salvataggio? Devi specificare ciascun file o possiamo usare i caratteri jolly? – formatc

+0

Puoi usare 'IncludeDirectory()' per includere tutti i file :-) Vedi anche: http://stackoverflow.com/questions/12926830/typescript-compiling-as-a-single-js-file –

+0

È sbagliato nel bundle da avere .Include ("~/Content/Scripts/all.ts")); ? – Revious

2

Supponendo che tutti i tuoi file ts siano direttamente o indirettamente in una cartella chiamata say "ts" potresti scrivere uno script tt che univa tutti i file .js (ma non min.js) in un file myApp.js e tutti dei tuoi file min.js in myApp.min.js.

Per ottenere l'ordinamento dei file è possibile elaborare le sottocartelle in tal modo:

string[] FolderOrder = 
{ 
    @"libs\utils\", 
    @"libs\controls\", 
    @"app\models", 
    @"app\viewmodels", 
    @".", 
}; 
+0

Cos'è uno script tt? –

Problemi correlati