Sadece (typescript ile) Açısal 2 (sürüm rc.2) uygulaması ile webpack 2.1.0-beta.15 güncellendi ama ağaç sallama özelliğinin nasıl kullanılacağını merak ediyorum. Okumak "kutunun dışında" çalışması gerekir, ama hala çok basit bir uygulama için 1.7Mb bir demet sahip, bu yüzden muhtemelen yanlış bir şey yapıyorum.Webpack'te ağaç titremesi nasıl kullanılır?
tsconfig.json
{
"compilerOptions": {
"target": "es5",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false
},
"exclude": [
"node_modules",
"typings/main",
"typings/main.d.ts"
]
}
package.json
{
"name": "angular2-quickstart",
"version": "1.0.0",
"scripts": {
"build": "webpack --progress",
"build:prod": "webpack -p --progress --optimize-minimize",
"postinstall": "typings install",
"serve": "webpack-dev-server --inline --progress --output-public-path=/dist/"
},
"license": "ISC",
"dependencies": {
"@angular/common": "2.0.0-rc.2",
"@angular/compiler": "2.0.0-rc.2",
"@angular/core": "2.0.0-rc.2",
"@angular/forms": "0.1.0",
"@angular/http": "2.0.0-rc.2",
"@angular/platform-browser": "2.0.0-rc.2",
"@angular/platform-browser-dynamic": "2.0.0-rc.2",
"@angular/router": "2.0.0-rc.2",
"@angular/router-deprecated": "2.0.0-rc.2",
"@angular/upgrade": "2.0.0-rc.2",
"angular-pipes": "1.4.0",
"bootstrap": "3.3.6",
"core-js": "2.4.0",
"file-loader": "0.9.0",
"jquery": "2.2.3",
"lodash": "4.13.1",
"reflect-metadata": "0.1.3",
"rxjs": "5.0.0-beta.6",
"script-loader": "0.7.0",
"style-loader": "0.13.1",
"url-loader": "0.5.7",
"zone.js": "0.6.12"
},
"devDependencies": {
"concurrently": "^2.0.0",
"css-loader": "0.23.1",
"html-loader": "0.4.3",
"json-loader": "^0.5.4",
"raw-loader": "0.5.1",
"ts-loader": "0.8.2",
"typescript": "1.8.10",
"typings": "1.0.4",
"webpack": "^2.1.0-beta.15",
"webpack-dev-server": "^2.1.0-beta",
}
}
webpack.config.js
var webpack = require('webpack');
var PROD = JSON.parse(process.env.PROD_ENV || '0');
module.exports = {
entry: './app/main.ts',
output: {
path: './dist',
filename: 'app.bundle.js'
},
module: {
loaders: [
{ test: /\.json$/, loader: 'json', include: [/node_modules/] },
{ test: /\.ts$/, loader: 'ts' },
{ test: /\.html$/, loader: 'html' },
{ test: /\.css$/, loader: 'style!css' },
{ test: /\.(png|woff|woff2|eot|ttf|svg)$/, loader: 'url-loader?limit=100000' }
]
},
resolve: {
extensions: ['', '.js', '.ts', '.css']
},
'htmlLoader': {
caseSensitive: true
},
plugins: PROD ? [
new webpack.optimize.UglifyJsPlugin({
compress: { warnings: false }
})
] : []
}
Ben:
Bu
Bugüne kadar ne var oldukça standart ithalat ifadeleri kullanarak m uchimport {FORM_DIRECTIVES,REACTIVE_FORM_DIRECTIVES} from '@angular/forms'
olarak ve ben (
import 'rxjs/add/operator/map';
) gerekenleri sadece içe çalışıyor ve çevre değişkeni PROD_ENV = 1 ile
npm run build:prod
ile yapısı çalıştırmayı.
Belki de jquery veya lodash gibi sorunlara neden oluyor (import * as $ from 'jquery'
veya import {orderBy} from 'lodash'
), ancak her ikisinin de nispeten küçük olduğuna inanıyorum. webpack visualizer göre, JQuery ve Lodash sırasıyla% 6.2 ve paket boyutu% 12 oluşturmaktadır. Açısal, paket boyutunun% 49'unu kullanır.
Neyi eksik? Eğer typescript kullanmak zorunda treeshaking için
sorusu en önemli şey yoksun kullanın. Eğer 'rxjs/add/operator/map' ithal ederseniz farketmez. App rxjs' veya 'rxjs/Rx' bir yerde içe aktarırsa, tüm RxJS içe aktarılır. Sonradan açısal versiyonlar, çünkü daha sonraki sürümler ayak izi iyileştirmeye yöneliktir. Ve% 49, kelimenin tam anlamıyla hiçbir şey söylemiyor. Köşeli yorumlarla yoğun bir şekilde doludur. – estus
Evet, Angular sürümünü eklemeyi unuttum. Bu rc.2. Yorumlardan kaçınmak için bir şey yapmam gerekip gerekmediğinden emin değilim (görebildiğiniz gibi, bir uglifier eklentisi var) ve web paketteki --optimize-minimize bayrağını kullanıyorum. Bu arada, belki de yanlış bir şey yaptığımı düşünüyordum, Angular'ın ağır olmasından şikayet etmiyorum. –
Pekala, ağır olması gerekiyordu, ağaç sallamanın burada bir şeyler yapabileceğini sanmıyorum. RC4'ü denemeyi ve RxJS ithalatlarını, örneğin; 'rxjs/Gözlemlenebilir' öğesinden içe aktarma {Gözlemlenebilir}. Lodash'a gelince, modüler paketler https://github.com/lodash/lodash/tree/4.2 yardımcı olabilir.1-npm-packages – estus