Comme plusieurs personnes déjà mentionnées: Tous les fichiers dans votre répertoire node_modules (MNP emplacement pour les paquets) dans le cadre de votre projet de dépendances (appelées dépendances directes). Comme un plus, vos dépendances peuvent également avoir leurs propres dépendances et ainsi de suite etc. (Appelées dépendances transitives). Plusieurs dizaines de milliers de fichiers ne sont rien de spécial.
Parce que vous n'êtes autorisé à télécharger 10'000 fichiers (Voir les commentaires), je voudrais aller avec bundler moteur. Ce moteur permettra de regrouper toutes vos JavaScript, CSS, HTML, etc ... et créer un lot unique (ou plus si vous le préciser). Votre index.html va charger ce bundle et c'est tout.
Je suis un fan de webpack, donc mon webpack solution permettra de créer un bundle d'application et un vendeur bundle (Pour toute demande, voir ici https://github.com/swaechter/project-collection/tree/master/web-angular2-example):
index.html
<!DOCTYPE html>
<html>
<head>
<base href="http://stackoverflow.com/">
<title>Webcms</title>
</head>
<body>
<webcms-application>Applikation wird geladen, bitte warten...</webcms-application>
<script type="text/javascript" src="vendor.bundle.js"></script>
<script type="text/javascript" src="main.bundle.js"></script>
</body>
</html>
webpack.config.js
var webpack = require("webpack");
var path = require('path');
var ProvidePlugin = require('webpack/lib/ProvidePlugin');
var CommonsChunkPlugin = require('webpack/lib/optimize/CommonsChunkPlugin');
var UglifyJsPlugin = require('webpack/lib/optimize/UglifyJsPlugin');
/*
* Configuration
*/
module.exports = {
devtool: 'source-map',
debug: true,
entry: {
'main': './app/main.ts'
},
// Bundle configuration
output: {
path: root('dist'),
filename: '[name].bundle.js',
sourceMapFilename: '[name].map',
chunkFilename: '[id].chunk.js'
},
// Include configuration
resolve: {
extensions: ['', '.ts', '.js', '.css', '.html']
},
// Module configuration
module: {
preLoaders: [
// Lint all TypeScript files
{test: /\.ts$/, loader: 'tslint-loader'}
],
loaders: [
// Include all TypeScript files
{test: /\.ts$/, loader: 'ts-loader'},
// Include all HTML files
{test: /\.html$/, loader: 'raw-loader'},
// Include all CSS files
{test: /\.css$/, loader: 'raw-loader'},
]
},
// Plugin configuration
plugins: [
// Bundle all third party libraries
new CommonsChunkPlugin({name: 'vendor', filename: 'vendor.bundle.js', minChunks: Infinity}),
// Uglify all bundles
new UglifyJsPlugin({compress: {warnings: false}}),
],
// Linter configuration
tslint: {
emitErrors: false,
failOnHint: false
}
};
// Helper functions
function root(args) {
args = Array.prototype.slice.call(arguments, 0);
return path.join.apply(path, [__dirname].concat(args));
}
Avantages:
- Version complète en ligne (TS peluchage, la compilation, la minification, etc.)
- 3 fichiers pour le déploiement --> un peu de requête Http
Inconvénients:
- Plus le temps de construction
- Pas la meilleure solution pour Http 2 projets (Voir l'avertissement)
Avertissement: Ce est une bonne solution pour Http 1.*, parce qu'il minimise la charge pour chaque requête Http. Vous n'avez qu'une demande de votre index.html et chaque ensemble, mais pas pour le 100 - 200 fichiers. Pour le moment, c'est le chemin à parcourir.
Http 2 sur l'autre main, tente de minimiser le Http généraux, de sorte qu'il est basé sur un protocole de flux. Ce flux est en mesure de communiquer dans les deux sens (Client <--> Serveur) et comme une raison de la plus intelligente des ressources de chargement est possible (on ne charge que les fichiers requis). Le flux élimine une grande partie de la Http généraux (Moins Http allers-retours).
Mais c'est la même qu'avec IPv6: Il faudra quelques années jusqu'à ce que les gens vont vraiment utiliser le protocole Http 2