Ho iniziato con TypeScript 2.5 anni fa con Visual Studio e ASP.Net MVC. VS Web Essentials compilava i file ts su save e la libreria WebOptimizer li raggruppava in runtime in un ordine specifico. Fondamentalmente un disastro, una volta che il progetto era sufficientemente grande.
Di quanto ho dato un'occhiata al codice generato dal generatore di gulp angolare . Ne ho preso le parti migliori, ho aggiunto gulp al mio processo di compilazione e improvvisamente il compilatore TypeScripts si è preso cura di ordinare il mio JavaScript compilato. L'ultima versione di quel generatore utilizza webpack per compilare e raggruppare TypeScript. Questo permette di usare le importazioni in stile ES6, ... ed è grandioso, ma non hanno cambiato nulla.
Utilizzano ancora bower per le dipendenze dei client, anche se è possibile utilizzare npm e la compilazione dei fogli di stile avviene anche in gulp, anche se il webpack dovrebbe essere in grado di occuparsene. Ora, amo bower e il fatto che posso configurare tutti i passaggi, che dovrebbero accadere con i file. Mi sembra molto trasparente, rispetto alla magia nera del webpack. Posso dividere file diversi in librerie di fornitori e applicazioni e sapere sempre cosa ottengo.
D'altra parte, il webpack da solo potrebbe essere ottimo e più facile da usare per progetti più piccoli. C'è un esempio spaventoso (dal mio punto di vista) di codice che puoi compilare nel webpack:
style.css
:
body {
background: yellow;
}
entry.js
:
require("!style!css!./style.css");
document.write(require("./content.js"));
Il file JavaScript generato contiene il CSS e lo aggiunge all'intestazione delle pagine. Mostra le funzionalità di webpacks, ma chi vorrebbe fare qualcosa del genere?
Quindi le domande:
- Questo è generalmente un buon approccio? Perché non utilizzare npm anche per le librerie client?
- In quale scenario è un buon approccio per raggruppare il contenuto CSS in file JavaScript? (Non riesco davvero a pensare a nessuno)
- Perché utilizzare webpack in primo luogo? Ci sono ulteriori vantaggi rispetto ai moduli ES6, invece di
///<reference path="..." />