각도 2 (버전 rc.2) 앱 (Typescript 포함)을 사용하여 webpack 2.1.0-beta.15로 업데이트했지만 나무 떨림 기능을 사용하는 방법이 궁금합니다. 나는 "out of the box"에서 작동해야한다고 읽었지 만, 아주 간단한 응용 프로그램을 위해 1.7Mb의 묶음을 가지고 있으므로, 아마도 나는 잘못된 것을하고있을 것입니다.Webpack에서 나무 떨림을 사용하는 방법?
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 }
})
] : []
}
나 ':
이
내가 지금까지 무엇을 가지고 상당히 표준 import 문을 사용하여 m uch를import {FORM_DIRECTIVES,REACTIVE_FORM_DIRECTIVES} from '@angular/forms'
으로 가져오고 (
import 'rxjs/add/operator/map';
) 필요한 것만 가져오고 환경 변수 PROD_ENV = 1을 사용하여
npm run build:prod
으로 빌드를 실행하십시오.
어쩌면 jquery 또는 lodash와 같은 문제가 (import * as $ from 'jquery'
또는 import {orderBy} from 'lodash'
) 문제를 일으키고 있을지 모르지만 둘 다 비교적 작다고 생각합니다. webpack visualizer에 따르면 Jquery와 Lodash는 각각 번들 크기의 6.2 %와 12 %를 차지합니다. Angular는 번들 크기의 49 %를 사용합니다.
무엇이 누락 되었습니까? 당신이 타이프 라이터를 사용할 필요가 treeshaking를 들어
질문은 패키지가 사용되는 가장 중요한 요소가 없습니다. 'import 'rxjs/add/operator/map'을해도 상관 없습니다. 응용 프로그램이'rxjs' 또는'rxjs/Rx'를 어딘가에 가져 오면 전체 RxJS를 가져옵니다. 후기 버전은 풋 프린트 개선을 목표로하기 때문에 나중에 각 버전에 고정하십시오. 그리고 49 %는 문자 그대로 아무것도 말하지 않습니다. Angular는 주석이 많이 들어 있습니다. – estus
예, Angular 버전을 포함하는 것을 잊었습니다. 그것은 rc.2입니다. 댓글을 피하기 위해 뭔가를해야할지 모르겠다. (볼 수 있듯이 uglifier 플러그인이있다.) webpack에서 --optimize-minimize 플래그를 사용하고있다. 그건 그렇고, 아마 내가 무언가를 잘못하고 있다고 생각했는데 Angular가 무거운 것에 대해 불평하지 않았습니다. –
글쎄, 그것은 무거워 야지, 나는 나무 떨림이 여기 뭔가를 할 수 있다고 생각하지 않는다. RC4를 시도하고 RxJS 가져 오기를 지시하는 것이 좋습니다 (예 : 'rxjs/Observable '에서 import {Observable}를 가져 오십시오. Lodash의 경우 모듈 패키지가 https://github.com/lodash/lodash/tree/4.2에 도움이 될 수 있습니다.1-npm-packages – estus