Như nhiều người đã đề cập: Tất cả các tệp trong thư mục node_modules của bạn (vị trí NPM cho các gói) là một phần của phụ thuộc dự án của bạn (Cái gọi là phụ thuộc trực tiếp). Ngoài ra, các phụ thuộc của bạn cũng có thể có các phụ thuộc riêng, v.v. (Cái gọi là phụ thuộc bắc cầu). Vài vạn tập tin không có gì đặc biệt.
Vì bạn chỉ được phép tải lên 10.000 tệp (Xem bình luận), tôi sẽ sử dụng công cụ đóng gói. Công cụ này sẽ gói tất cả JavaScript, CSS, HTML, v.v. của bạn và tạo một gói duy nhất (hoặc nhiều hơn nếu bạn chỉ định chúng). Index.html của bạn sẽ tải gói này và đó là nó.
Tôi là một fan hâm mộ của webpack, vì vậy giải pháp webpack của tôi sẽ tạo ra một gói ứng dụng và gói nhà cung cấp (Đối với ứng dụng hoạt động đầy đủ, hãy xem tại đây https://github.com/swaechter/project-collection/tree/master/web-angular2- ví dụ ):
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));
}
Ưu điểm:
- Dòng xây dựng đầy đủ (TS linting, biên dịch, thu nhỏ, v.v.)
- 3 tệp để triển khai -> Chỉ một vài yêu cầu http
Nhược điểm:
- Thời gian xây dựng cao hơn
- Không phải là giải pháp tốt nhất cho các dự án http 2 (Xem từ chối trách nhiệm)
Tuyên bố từ chối trách nhiệm: Đây là một giải pháp tốt cho http 1. *, vì nó giảm thiểu chi phí cho mỗi yêu cầu http. Bạn chỉ có một yêu cầu cho index.html và mỗi gói - nhưng không phải cho 100 - 200 tệp. Hiện tại, đây là con đường để đi.
Mặt khác, HTTP 2 cố gắng giảm thiểu chi phí hoạt động, do đó, nó dựa trên giao thức truyền phát. Luồng này có thể giao tiếp theo cả hai hướng (Máy khách <-> Máy chủ) và vì lý do đó, có thể tải tài nguyên thông minh hơn (Bạn chỉ tải các tệp cần thiết). Luồng giúp loại bỏ phần lớn chi phí http (Chuyến đi vòng ít http).
Nhưng nó giống như với IPv6: Sẽ mất vài năm cho đến khi mọi người thực sự sử dụng Http 2