Як вже згадувалося декілька людей: усі файли у вашому каталозі node_modules (NPM-місце для пакетів) є частиною вашої проектної залежності (так звані прямі залежності). На додаток до цього, ваші залежності також можуть мати власні залежності тощо. (Так звані транзитивні залежності). Кілька десяти тисяч файлів - нічого особливого.
Оскільки вам дозволяється завантажувати лише 10 000 файлів (Див. Коментарі), я б пішов із механізмом пакетної роботи. Цей двигун з'єднає всі ваші JavaScript, CSS, HTML тощо та створить єдиний пакет (або більше, якщо ви вказали їх). Ваш index.html завантажить цей пакет, і все.
Я шанувальник веб-упаковки, тому моє рішення для веб-упаковки створить пакет програм та пакет постачальників (Повний робочий додаток див. Тут https://github.com/swaechter/project-collection/tree/master/web-angular2- приклад ):
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));
}
Переваги:
- Повна лінія побудови (обшивка TS, збирання, мінімізація тощо)
- 3 файли для розгортання -> Лише кілька запитів Http
Недоліки:
- Більш високий час побудови
- Не найкраще рішення для Http 2 проектів (Див. Відмову від відповідальності)
Відмова від відповідальності: Це хороше рішення для Http 1. *, оскільки воно мінімізує накладні витрати для кожного запиту Http. У вас є лише запит на ваш index.html та кожен пакет, але не для 100 - 200 файлів. На даний момент це шлях.
Http 2, з іншого боку, намагається мінімізувати накладні витрати Http, тому він заснований на протоколі потоку. Цей потік здатний спілкуватися в обох напрямках (Клієнт <--> Сервер), і тому причиною цього є більш розумна завантаження ресурсів (Ви завантажуєте лише потрібні файли). Потік усуває велику частину натхнення Http (Менше Http туристів).
Але це те саме, що і з IPv6: Мине кілька років, поки люди дійсно використовуватимуть Http 2