【发布时间】:2016-06-16 14:43:39
【问题描述】:
我在我的 Angular 2 项目中使用 Typescript 和 SystemJS 来加载模块,并使用 Gulp 来执行任务运行器。项目中当前的 Angular 版本是 RC2,但 RC1 也存在问题。我按照布兰多回答here的步骤。
捆绑我的应用程序和网站 SystemJS 的初始加载后抛出错误:
错误:http://localhost:57462/app/app.bundle.js 检测为寄存器但未执行。
应用程序可以运行,但控制台中的错误绝对不是一件好事。
我在空项目上测试了我的配置,问题又出现了,所以我认为问题出在配置中。
这里是:
Gulp 文件
var gulp = require('gulp');
var sourcemaps = require('gulp-sourcemaps');
var concat = require('gulp-concat');
var typescript = require('gulp-typescript');
var jspm = require('gulp-jspm-build');
gulp.task('compile:ts', function () {
return gulp.src(['./appTS/**/*.ts'])
.pipe(sourcemaps.init())
.pipe(typescript({
noEmitOnError: true,
target: 'ES5',
removeComments: false,
experimentalDecorators: true,
emitDecoratorMetadata: true,
module: 'system',
moduleResolution: 'node'
}))
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest('./app/'));
});
gulp.task('copy:vendor', function () {
return gulp.src([
'node_modules/systemjs/dist/system-polyfills.js',
'node_modules/reflect-metadata/Reflect.js',
'node_modules/core-js/client/shim.min.js',
'node_modules/zone.js/dist/zone.min.js',
'node_modules/systemjs/dist/system.js',
'node_modules/rxjs/bundles/Rx.js'
]).pipe(gulp.dest('./assets/vendor/'));
});
gulp.task('bundle:app', ['compile:ts'], function () {
return jspm({
bundleOptions: {
minify: true,
mangle: false
},
bundleSfx: true,
bundles: [
{ src: './app/main.js', dst: 'bundle.js' }
]
})
.pipe(gulp.dest('./app/'));
});
gulp.task('bundle', ['bundle:app', 'copy:vendor'], function () {
return gulp.src([
'./assets/vendor/Reflect.js',
'./assets/vendor/shim.min.js',
'./assets/vendor/zone.min.js',
'./app/bundle.js'])
.pipe(concat('app.bundle.js'))
.pipe(gulp.dest('./app/'))
});
gulp.task('default', ['bundle']);
var packages = {
app: {
format: 'register',
defaultExtension: 'js'
},
"symbol-observable": { main: 'index.js', defaultExtension: 'js' },
"reflect-metadata": { main: 'Reflect.js', defaultExtension: 'js' }
};
var ngPackageNames = ['common',
'compiler',
'core',
'http',
'platform-browser',
'platform-browser-dynamic',
'router',
'router-deprecated',
'upgrade'];
ngPackageNames.forEach(function (element, index, array) {
packages['@angular/' + element] = { main: 'bundles/' + element + '.umd.min.js', defaultExtension: 'js' };
});
System.config({
main: 'dispel.bundle.min',
defaultExtension: 'js',
format: 'register',
packages: packages,
baseURL: "/",
defaultJSExtensions: true,
transpiler: false,
paths: {
"node_modules*": "node_modules*",
"@angular*": "node_modules/@angular/*"
},
map: {
"@angular": "node_modules/@angular",
"symbol-observable": "node_modules/symbol-observable",
"ng2-translate": "node_modules/ng2-translate",
"es6-shim": "node_modules/es6-shim",
"reflect-metadata": "node_modules/reflect-metadata",
"rxjs": "node_modules/rxjs",
"zone.js": "node_modules/zone.js"
}
});
【问题讨论】:
-
你能创建一个我们可以克隆和测试的仓库吗?
-
另外,您使用
system/register格式有什么特别的原因吗?如果在 TS 编译器中使用"module": "commonjs"并在系统配置中使用format": "cjs"会发生什么? -
没有什么特别的原因。 SystemJS 不再抛出该错误,但出现了一个新错误:
crypto.js not found。我在 System.config -> map 部分添加了"crypto": "node_modules/crypto-js/index.js"映射,一切正常,但 SystemJS 对每个 crypto-js 文件(大约 30 个)发出单独的请求。 -
@Sasxa 你能发布答案吗
-
我正在使用这个启动器,它可以满足您的所有需求以及更多功能:github.com/antonybudianto/angular2-starter gulp 文件很好地划分为单独的任务,并且非常易于管理。
标签: typescript angular gulp systemjs jspm