Seperti yang sudah disebutkan beberapa orang: Semua file di direktori node_modules Anda (lokasi NPM untuk paket) adalah bagian dari dependensi proyek Anda (Disebut dependensi langsung). Sebagai tambahan untuk itu, dependensi Anda juga dapat memiliki dependensi mereka sendiri dan seterusnya, dll. (Disebut dependensi transitif). Beberapa sepuluh ribu file tidak ada yang istimewa.
Karena Anda hanya diperbolehkan mengunggah 10'000 file (Lihat komentar), saya akan menggunakan mesin bundler. Mesin ini akan menggabungkan semua JavaScript, CSS, HTML, dll. Anda dan membuat satu bundel (atau lebih jika Anda menentukannya). Index.html Anda akan memuat bundel ini dan hanya itu.
Saya penggemar webpack, jadi solusi webpack saya akan membuat bundel aplikasi dan bundel vendor (Untuk aplikasi yang berfungsi penuh lihat di sini https://github.com/swaechter/project-collection/tree/master/web-angular2- contoh ):
index.html
<!DOCTYPE html>
<html>
<head>
<base href="/">
<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));
}
Keuntungan:
- Garis build penuh (TS linting, compiling, minification, dll.)
- 3 file untuk penyebaran -> Hanya beberapa permintaan Http
Kekurangan:
- Waktu membangun lebih tinggi
- Bukan solusi terbaik untuk proyek Http 2 (Lihat penafian)
Penafian: Ini adalah solusi yang baik untuk Http 1. *, karena meminimalkan biaya overhead untuk setiap permintaan Http. Anda hanya memiliki permintaan untuk index.html Anda dan setiap bundel - tetapi tidak untuk 100 - 200 file. Saat ini, inilah jalan yang harus ditempuh.
Http 2, di sisi lain, mencoba untuk meminimalkan overhead Http, jadi ini didasarkan pada protokol streaming. Aliran ini dapat berkomunikasi dalam dua arah (Klien <--> Server) dan sebagai alasannya, pemuatan sumber daya yang lebih cerdas dimungkinkan (Anda hanya memuat file yang diperlukan). Aliran menghilangkan banyak overhead Http (Perjalanan pulang-pergi Http kurang).
Tetapi sama dengan IPv6: Dibutuhkan beberapa tahun hingga orang benar-benar menggunakan Http 2