2016-09-16 37 views
0

我試圖設置一個基本的MEAN應用程序(w/angular2 2.0.0)。在配置gulp和systemJS時,運行gulp成功沒有任何錯誤,但是當我啓動服務器時,它會拋出一些錯誤:LinkAngular2.0.0&express - SystemJS traceur(404)找不到

我懷疑問題是systemJS配置文件,但找不到解決方法它。 (角2.0.0的問題?)

有沒有多行註釋可能導致此(或我知道)。

任何幫助表示讚賞。以下是相關的代碼塊:

文件夾結構:Here

Index.hbs:在上述錯誤

systemjs.config.js:

var map = { 
'app': 'js/app', 
'rxjs': 'js/vendor/rxjs', 
'@angular': 'js/vendor/@angular' 
}; 

var packages = { 
'app': { main: 'main.js', defaultExtension: 'js' }, 
'rxjs': { defaultExtension: 'js' } 
}; 

var packageNames = [ 
'@angular/common', 
'@angular/compiler', 
'@angular/core', 
'@angular/http', 
'@angular/platform-browser', 
'@angular/platform-browser-dynamic', 
'@angular/router', 
'@angular/testing', 
'@angular/upgrade' 
]; 

packageNames.forEach(function(pkgName) { 
packages[pkgName] = { main: 'index', defaultExtension: 'js' }; 
}); 

var config = { 
map: map, 
packages: packages 
}; 

System.config(config); 

gulpfile .js:

var gulp = require('gulp'); 
var gulpTypescript = require('gulp-typescript'); 
var gulpSourcemaps = require('gulp-sourcemaps'); 
var appDev = "assets/app"; 
var appProd = "public/js/app"; 
var vendor = "public/js/vendor"; 
var tsconfig = gulpTypescript.createProject('tsconfig.json'); 

gulp.task('build-ts', function() { 
    return gulp.src(appDev + "/**/*.ts") 
    .pipe(gulpSourcemaps.init()) 
    .pipe(gulpTypescript(tsconfig)) 
    .pipe(gulpSourcemaps.write()) 
    .pipe(gulp.dest(appProd)); 
}); 

gulp.task('build-copy', function() { 
    return gulp.src([appDev + "/**/*.html", appDev + "/**/*.css"]) 
    .pipe(gulp.dest(appProd)); 
}); 

gulp.task('vendor', function() { 
    gulp.src('node_modules/@angular/**') 
    .pipe(gulp.dest(vendor + "/@angular/")); 

gulp.src('node_modules/core-js/**') 
.pipe(gulp.dest(vendor + "/core-js/")); 

gulp.src('node_modules/reflect-metadata/**') 
.pipe(gulp.dest(vendor + "/reflect-metadata/")); 

gulp.src('node_modules/rxjs/**') 
.pipe(gulp.dest(vendor + "/rxjs/")); 

gulp.src('node_modules/systemjs/**') 
.pipe(gulp.dest(vendor + "/systemjs/")); 

return gulp.src('node_modules/zone.js/**') 
.pipe(gulp.dest(vendor + "/zone.js/")); 
}); 

gulp.task('watch', function() { 
    gulp.watch(appDev + "**/*.ts", ['build-ts']); 
    gulp.watch(appDev + "**/*.{html,css}", ['build-copy']); 
}); 

gulp.task('default', ['watch', 'build-ts', 'build-copy', 'vendor']); 

main.js

/// <reference path="../../typings.d.ts" /> 

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 

import { AppModule } from './app.module'; 

platformBrowserDynamic().bootstrapModule(AppModule); 

回答

0

正是這個代碼在systemjs.config.js:

packageNames.forEach(function(pkgName) { 
    packages[pkgName] = { main: 'index', defaultExtension: 'js' }; 
}); 

,每天角包映射到其非捆綁的源代碼,其含有ES6 import語句和需要動態編譯,所以systemjs會嘗試加載traceur編譯器並失敗。

你可能不需要這個,事實上,如果你看角度快速入門的例子的最新版本,你將不會再找到這個代碼。

如果你不喜歡開始從他們的示例代碼的最新版本新是一個好主意,你可以嘗試更換這些3行本(改編自他們的舊版本,沒有測試):

packageNames.forEach(function(pkgName) { 
    packages[pkgName] = { main: 'bundles/' + pkgName.replace('@angular/', '') + '.umd.js', defaultExtension: 'js' }; 
}); 

這應該將他們的軟件包映射到已經編譯好的軟件包,這樣就不需要traceur。