2016-09-06 17 views
10

Angular 2 rc 6 Ben Öncesi-of-Time derleme as outlined here öğrenmeye çalışıyorum Typescript 2.0.2Eğik 2 Ahead-of-Time derleyici yudum-daktilo ile

yazılmış. Çok basit yeterince görünüyor:

  • Run ngc yerine typescript derleyici
  • benim kurulum için ilk adımı nasıl uygulanacağını emin değilim platformBrowser().bootstrapModuleFactory()

ile platformBrowserDynamic().bootstrapModule() değiştirin .ngfactory.ts dosyaları oluşturmak için. Yazı tipimi JavaScript’e derlemek için gulp-typescript 2.13.6 kullanıyorum.

gulpfile.js

var ts = require('gulp-typescript'); 
var tsProject = ts.createProject('tsconfig.json', { 
    //Use TS version installed by NPM instead of gulp-typescript's built-in 
    typescript: require('typescript') 
}); 
gulp.task('build-ts', function() { 
    return gulp.src(appDev + '**/*.ts') 
     .pipe(ts(tsProject)) 
     .pipe(gulp.dest(appProd)); 
}); 

Yani benim sorum; Talimatları takımımla nasıl bütünleştirebilirim? Açısal Derleyiciyi kullanmak için gulp-typescript nasıl edinebilirim? Ben denedim:

var tsProject = ts.createProject('tsconfig.json', { 
    typescript: require('@angular/compiler') // or '@angular/compiler-cli' 
}); 

Bu şimdiye kadar ngc çalıştırmadan hataları atar. Ben de ngc çalıştırıyor

var tsProject = ts.createProject('tsconfig.json', { 
    typescript: require('./node_modules/.bin/ngc') 
}); 

Bu

çalıştı ama hemen atar hatası:

SyntaxError: Unexpected string at ngc:2: basedir=$(dirname "$(echo "$0" | sed -e 's,\,/,g')")

hiçbir kaynak dizin (gerekli komut ngc -p path/to/project olan) Temelde

ngc geçirilir çünkü bu şüpheli , bir adım oluşturma işlemi için gulp-typescript kullanmanın bir yolu var mı? yudum-typescript typescript denilen bir şey arar veya komutu tsc çalıştırmayı dener ve açısal derleyici komut olduğundan dolayı çalışmıyor typescript: require(..) neden

cevap

7

hayal sebep (daha sonra JavaScript tüm derlemek, .ngfactory.ts dosyaları oluşturmak) ngc, bu onu bulamıyor. Projeniz derlemeden kadar basitse

Şimdilik, sadece şöyle yudum gelen komutu çalıştırabilirsiniz:

var exec = require('child_process').exec; 

gulp.task('task', function (cb) { 
    exec('ngc -p "<path to your tsconfig.json>"', function (err, stdout, stderr) { 
    console.log(stdout); 
    console.log(stderr); 
    cb(err); 
    }); 
}); 

Bu potansiyeli olan, sizin tsconfig.json doğru ayarlanmış olması gerekir Google'ın, Yapılandırma başlığı altında here hakkında konuştuğu ekstra seçenekler.

Eğer gulp-typescript paketinin sağladığı daha karmaşık işlevselliklere ihtiyacınız varsa, ya kendiniz geliştirmelisiniz ya da başka birini beklemeniz gerekecek.

+0

Teşekkürler William. Lütfen birkaç detay daha ekleyin: cb ve cb (err) 'nedir? Bir child_process' eklentisini yüklemem gerekir mi? Yol 'tsconfig.json' adını da içeriyor mu, yoksa sadece dizine giden yol mu? – BeetleJuice

+1

'cb' Geri dönüşü beklediğime inanıyorum, bu yüzden kod snippetinde,' cb (err) 'hata fonksiyonunu geri arama fonksiyonuna aktarır. Bu snippet'i buradaki bilgilerden uyarladım (https://www.npmjs.com/package/gulp-exec). child_process', gulp 4.0 ve üstü yerleşik bir modüldür. Yolla ilgili olarak, bu [Google bağlantısı] (https://github.com/angular/angular/tree/master/modules/@angular/compiler-cli) 'den, "Bu bir -p" bayrakını kabul eder. 'tsconfig.json' dosyasına veya bir tane içeren dizine işaret eder. bu yüzden ya. –

3

Bunu çalışmak için çalışıyordum ve William Gilmour'un answer çok yardımcı oldu.

var exec = require('child_process').exec; 
var os = require('os'); 

gulp.task('build-ts', function (cb) { 

    var cmd = os.platform() === 'win32' ? 
     'node_modules\\.bin\\ngc' : './node_modules/.bin/ngc'; 

    exec(cmd, function (err, stdout, stderr) { 
     console.log(stdout); 
     console.log(stderr); 
     cb(err); 
    }); 
}); 
1

Bu haç geçerli:

hangi Linux ve Windows sistemlerinde hem çalışır (node_modules/.bin bir tane çalışan açısal 2 example gibi) yerel bir ngc yüklemeyi çalıştırmak için bunu biraz genişletilmiş ve

//jshint node:true 
//jshint esversion: 6 
'use strict'; 

... 

// helper function for running ngc and tree shaking tasks 
const run_proc = (cmd, callBack, options) => { 
     process.stdout.write(stdout); 
     process.stdout.write(stderr); 
     callBack(err); 
    }); 
}; 


gulp.task('ngc', ['css', 'html', 'ts'], cb => { 
    let cmd = 'node_modules/.bin/ngc -p tsconfig-aot.json'; 
    if (isWin) { 
     cmd = '"node_modules/.bin/ngc" -p tsconfig-aot.json'; 
    } 
    return run_proc(cmd, cb); 
}); 

Tour of Heroes (ToH) örnek wi tüm örneğini kontrol çekinmeyin: Şu anda açısal 2 Sürdürüyor-of-Time (AOT) derleme için kullanıyorum gulpfile ait -platform versiyonu Benim github repo üzerinde th gulp.js: ng2-heroes-gulp

Bu kesinlikle kısa vadeli çözüm, benim için uzun vadeli çözüm gulp-ngc eklentisi olacak.