Je viens de créer un nouveau projet Angular 4 avec la CLI: ng new test
Les versions:
@angular/cli: 1.0.0
node: 6.10.0
os: win32 x64
@angular/common: 4.0.1
@angular/compiler: 4.0.1
@angular/core: 4.0.1
@angular/forms: 4.0.1
@angular/http: 4.0.1
@angular/platform-browser: 4.0.1
@angular/platform-browser-dynamic: 4.0.1
@angular/router: 4.0.1
@angular/cli: 1.0.0
@angular/compiler-cli: 4.0.1
Cependant, l'arborescence ne fonctionne pas correctement, car ma classe inutilisée FooBar
est toujours dans le main.*.js
fichier.
Mon exemple de fichier TS de composant (FooBar ne doit pas être dans la sortie):
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'app works!';
}
export class FooBar {
foo = "hello";
}
J'ai essayé d'utiliser le rollup (comme décrit dans la documentation) mais cela n'a pas fonctionné aussi bien ...
Existe-t-il un moyen simple d'activer le tremblement d'arbre? (Je m'attendais à ce qu'il soit activé par défaut lors de la création d'un projet via CLI).
Mise à jour: J'utilise ng build --prod
et ce n'est toujours pas secoué ..
Mise à jour: depuis le Wiki angular-cli :
Toutes les versions utilisent le regroupement et l'arborescence limitée, tandis que
--prod
les builds exécutent également une élimination limitée du code mort via UglifyJS.
Voir aussi ci-dessous.
Le compilateur Ahead-of-Time (AOT)
Un --prod
par défaut, la construction est --aot=true
maintenant; ça fait un moment.
Il n'y a aucun document que j'ai trouvé sur le site angular.io qui offre une grande quantité de détails sur le processus exact de tremblement d'arbre. L'interface CLI Angular utilise le webpack depuis un certain temps maintenant, et il y a des informations sur la façon dont cet outil agit en arborescence ici . glifyJS = semble être un thème commun.
Tant que vous suivez les directives du lien ci-dessus sur AOT, vous devriez obtenir de bons résultats. Si vous avez des difficultés à faire une compilation AOT avec des bibliothèques tierces, il y a toujours le risque que la bibliothèque n'ait pas été écrite pour prendre en charge AOT. Bien que la compatibilité AOT soit attendue de nos jours.
Pour secouer les arbres, utilisez ng build --prod --build-optimizer
. De cette façon, vendor.js et main.js sont combinés dans le fichier main.js. Pour éviter cela, vous devez ajouter --vendor-chunk=true
Essayer de faire ng build --prod --aot