Angular2 la ngIf ne fonctionne pas dans un environnement de déploiement

j'ai écrit une très simple petite application Angular2 que j'ai construit pour générer des feuilles d'exercice. Cependant, il semble que lorsque je déploie l'application ngIf ne fonctionne pas (soit mon serveur web par défaut ISP ou mon propre Heroku /Local deployed node-http-server). Lorsque j'exécute exactement la même base de code sur mon serveur de noeuds dev ( npm start ), ngIf fonctionne comme prévu.

si quelqu'un a quelques conseils sur la façon dont je peux corriger cela, je serais extrêmement reconnaissante, ou si je fais quelque chose de mal...

voici le code correspondant

src/template.html

Click on the top left word <span *ngIf="word">({{word}})</span><span *ngIf="!word">(&lt;click&gt;)</span>

app.ts

import {bootstrap} from 'angular2/platform/browser'
import {enableProdMode, Component} from 'angular2/core'
enableProdMode()

@Component({
  selector: 'app',
  templateUrl: 'src/template.html'
})
export class AppComponent {
  public word = '';
}

bootstrap(AppComponent)

quand l'application démarre localement je vois " cliquez sur le mot en haut à gauche ()" (comme vu dans ce lien plunker ), cependant quand je déploie l'application je viens de voir " cliquez sur le haut gauche de la parole". J'ai déjà trouvé des problèmes similaires avec ngFor lors de son déploiement. Je vois cependant le code suivant dans dev et deploy

<!--template bindings={}-->
<!--template bindings={}-->

donc le modèle est en cours de traitement, au moins dans une certaine mesure. Ma meilleure supposition est que quelque chose doit aller mal lorsque je génère le bundle.js ou dependencies.js fichier s par gulfp. Je ne vois aucune erreur Javascript sur le dev ou le site de déploiement via Chrome dev console.

voici quelques-unes des tâches pertinentes de mon gulffile.

gulp.task('webpack', ['clean'], function() {
  return gulp.src('src/app/app.ts')
    .pipe(webpack(require('./webpack.config.js')))
    .pipe(gulp.dest('src/'));
});

gulp.task('dependencies', function() {
  return gulp.src(['node_modules/reflect-metadata/Reflect.js', 
                   'node_modules/zone.js/dist/zone.js'])
    .pipe(concat('dependencies.js'))
    .pipe(uglify())
    .pipe(gulp.dest('dist/'));
});

J'utilise Angular2.0.0-bêta.7. Mon pipeline de déploiement gulfp utilise également Webpack1.12.2 avec la configuration suivante:

webpack.config.js

module.exports = {
  entry: './src/app/app',
  output: {
    path: __dirname + '/src', publicPath: 'src/', filename: 'bundle.js'
  },
  resolve: {
    extensions: ['', '.js', '.ts']
  },
  module: {
    loaders: [{
      test: /.ts/, loaders: ['ts-loader'], exclude: /node_modules/
    }]
  }
};
1
demandé sur carnun 2016-02-24 23:13:01

1 réponses

grâce à la suggestion de débogage de @EricMartinez, l'application fonctionne maintenant. Le problème réside dans la modification du code Javascript uglifié. (Je vais essayer de retracer ce qui ne va pas pendant le traitement du fichier JavaScript concaténé.) Pour l'instant, désactiver la mangrove dans uglify () fait l'affaire, mais bien sûr je n'ai plus d'obscurcissement du code (ce qui n'est pas un problème pour mon implémentation particulière). Voici la solution:

gulffile.js

gulp.task('js', ['webpack'], function() {
  return gulp.src('src/bundle.js')
    .pipe(uglify({ mangle: false })) // <- added mangle option set to false
    .pipe(gulp.dest('dist/'));
});

le code original ressemblait à ceci

gulp.task('js', ['webpack'], function() {
  return gulp.src('src/bundle.js')
    .pipe(uglify())
    .pipe(gulp.dest('dist/'));
});

Voir cette question sur github pour plus d'.

5
répondu carnun 2016-08-20 05:54:53