Angular 角度2、大口、系统JS->;默认扩展的问题
我正在将Angular2与SystemJS一起使用,这在开发过程中非常有效。现在我想使用gulp部署我的第一个编译版本 为了澄清,我使用了以下systemJS文件:Angular 角度2、大口、系统JS->;默认扩展的问题,angular,gulp,systemjs,Angular,Gulp,Systemjs,我正在将Angular2与SystemJS一起使用,这在开发过程中非常有效。现在我想使用gulp部署我的第一个编译版本 为了澄清,我使用了以下systemJS文件: (function(global) { // map tells the System loader where to look for things var map = { 'app': 'app', // 'dist', 'rxjs':
(function(global) {
// map tells the System loader where to look for things
var map = {
'app': 'app', // 'dist',
'rxjs': 'lib/node_modules/rxjs',
'angular2-in-memory-web-api': 'lib/node_modules/angular2-in-memory-web-api',
'@angular': 'lib/node_modules/@angular',
'ng2-charts/bundles': 'lib/node_modules/ng2-charts/bundles',
'ng2-charts/components': 'lib/node_modules/ng2-charts/components',
'ng2-cookies': 'lib/node_modules/ng2-cookies/'
};
// packages tells the System loader how to load when no filename and/or no extension
var packages = {
'app': { format: 'register', defaultExtension: 'js' },
'rxjs': { defaultExtension: 'js' },
'angular2-in-memory-web-api': { defaultExtension: 'js' }
};
var packageNames = [
'@angular/common',
'@angular/compiler',
'@angular/core',
'@angular/http',
'@angular/platform-browser',
'@angular/platform-browser-dynamic',
'@angular/router',
'@angular/router-deprecated',
'@angular/testing',
'@angular/upgrade',
];
// add package entries for angular packages in the form '@angular/common': { main: 'index.js', defaultExtension: 'js' }
packageNames.forEach(function(pkgName) {
packages[pkgName] = { main: 'index.js', defaultExtension: 'js' };
});
var config = {
baseURL: "/",
defaultJSExtension : true,
map: map,
packages: packages
}
// filterSystemConfig - index.html's chance to modify config before we register it.
if (global.filterSystemConfig) { global.filterSystemConfig(config); }
System.config(config);
})(this);
以及以下gulpfile:
const gulp = require('gulp');
const del = require('del');
const typescript = require('gulp-typescript');
const tscConfig = require('./tsconfig.json');
const tsconfig = require('tsconfig-glob');
const sourcemaps = require('gulp-sourcemaps');
// clean the contents of the distribution directory
gulp.task('clean', function () {
return del('dist/**/*');
});
// TypeScript compile
gulp.task('compile', ['clean'], function () {
return gulp
.src(tscConfig.files)
.pipe(sourcemaps.init()) // <--- sourcemaps
.pipe(typescript(tscConfig.compilerOptions))
.pipe(sourcemaps.write('.')) // <--- sourcemaps
.pipe(gulp.dest('dist'));
});
// copy dependencies
gulp.task('copy:libs', ['clean'], function() {
return gulp.src([
'node_modules/angular2/bundles/angular2-polyfills.js',
'node_modules/systemjs/dist/system.src.js',
'node_modules/rxjs/bundles/Rx.js',
'node_modules/angular2/bundles/angular2.dev.js',
'node_modules/angular2/bundles/router.dev.js',
'node_modules/chart.js/dist/Chart.bundle.min.js',
'node_modules/es6-shim/es6-shim.min.js',
'node_modules/zone.js/dist/zone.js',
'node_modules/reflect-metadata/Reflect.js',
'node_modules/systemjs/dist/system.src.js',
'TcAdsWebService.js'
])
.pipe(gulp.dest('dist/lib'))
});
gulp.task('copy:modules',['clean'],function() {
return gulp.src([
'./node_modules/@angular/**/*',
'./node_modules/rxjs/**/**',
'./node_modules/angular2-in-memory-web-api/**/*',
'./node_modules/ng2-charts/**/*',
'./node_modules/ng2-cookies/**/*'
],{base:'./'}).pipe(gulp.dest('dist/lib'));
});
gulp.task('copy:pics',['clean'], function () {
return gulp.src(['pics/**/*'],{base:'./'}).pipe(gulp.dest('dist/css'));
})
gulp.task('copy:css',['clean'],function() {
return gulp.src(['css/**/*'],{base:'./'}).pipe(gulp.dest('dist/css'));
});
gulp.task('copy:js',['clean'],function() {
return gulp.src(['js/**/*'],{base:'./'}).pipe(gulp.dest('dist/js'));
});
gulp.task('copy:systemJS',['clean'],function() {
return gulp.src(['systemjs.config.js']).pipe(gulp.dest('dist'));
});
// copy static assets - i.e. non TypeScript compiled source
gulp.task('copy:assets', ['clean'], function() {
return gulp.src(['app/**/*', 'index.html', 'styles.css', '!app/**/*.ts'], { base : './' })
.pipe(gulp.dest('dist'))
});
gulp.task('tsconfig-glob', function () {
return tsconfig({
configPath: '.',
indent: 2
});
});
gulp.task('build', ['tsconfig-glob','compile', 'copy:pics', 'copy:js', 'copy:css', 'copy:systemJS','copy:modules','copy:libs', 'copy:assets']);
gulp.task('default', ['build']);
这表明它缺少编译文件中的.js扩展名。我相当肯定
'app': { format: 'register', defaultExtension: 'js' },
实际上应该要求编译器注意app文件夹中的.js扩展名,但事实并非如此。
这是我的第一个angular2项目,也是我的第一次gulp编译,我很确定我缺少它的一些基本方面,但我在我的代码中找不到它。鉴于您的设置,您应该使用它来捆绑您的应用程序进行生产。它接受您的SystemJS配置,因此无需进一步配置。它将您的模块捆绑到一个文件中,并提供缩小、修改等选项 这是以“es6模块”的方式进行的,更好地利用我们的模块加载器,而不是像在传统javascript应用程序(es5)中那样复制/粘贴模块 这样做,我们可以从索引页面中取出动态加载,只需使用指向捆绑包的脚本标记,它将大大加快加载时间,并最大限度地减少用户为加载页面而必须下载的内容。也不需要复制节点_模块 给定文件夹结构:
src
|-- app
| |-- main.ts
| |-- index.html
| |-- bundle.min.js
|-- system.config.js
|-- node_modules
|-- tsconfig.json
您甚至可以通过一次吞咽任务完成所有这一切
任务:(需要码):
运行此任务:
gulp bundle
或
index.html:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<base href="/" />
<title>Your App</title>
<link rel="stylesheet" href='styles/bootstrap.min.css' />
<script src="/bundle.js"></script>
</head>
<body>
<your-root-component>
</your-root-component>
</body>
</html>
所有这些都表明:我相信您的软件包部分:
var packages = {
'app': { format: 'register', defaultExtension: 'js' },
'rxjs': { defaultExtension: 'js' },
'angular2-in-memory-web-api': { defaultExtension: 'js' }
};
应该是:
var packages = {
'app': { main: 'main.js', defaultExtension: 'js' },
'rxjs': { main: 'Rx.js', defaultExtension: 'js' },
'angular2-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' }
};
main.js是任何包含angular2引导功能的文件。Wow谢谢!这个答案帮助很大。我在半个小时内安装并运行了它(在我安装并更新了所有丢失的软件包:-)之后。很高兴它有所帮助。ES6模块是许多开发人员迈出的一大步。太棒了,你只花了半个小时就搞定了,我不会说我花了多少时间才弄明白这些东西……:)
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<base href="/" />
<title>Your App</title>
<link rel="stylesheet" href='styles/bootstrap.min.css' />
<script src="/bundle.js"></script>
</head>
<body>
<your-root-component>
</your-root-component>
</body>
</html>
(function (global) {
var config = {
compiler: "typescript",
map: {
'jquery': 'node_modules/jquery/dist',
'bootstrap': 'node_modules/bootstrap/dist/js',
"reflect-metadata": "node_modules/reflect-metadata",
"zone": "node_modules/zone.js/dist",
"crypto": "node_modules/crypto",
'rxjs': 'node_modules/rxjs',
'angular2-in-memory-web-api': 'node_modules/angular2-in-memory-web-api',
'@angular': 'node_modules/@angular',
'moment': 'node_modules/moment',
'angular2-moment': 'node_modules/angular2-moment',
'app': 'src/app',
},
meta: {
'node_modules/bootstrap/dist/js/bootstrap.js': {
format: 'global',
deps: ['jquery']
}
},
packages: {
'jquery': { main: 'jquery.js', defaultExtension: 'js' },
'bootstrap': { main: 'bootstrap.js', defaultExtension: 'js' },
'zone': { main: 'zone.js', defaultExtension: 'js' },
'reflect-metadata': { main: 'Reflect.js', defaultExtension: 'js' },
'crypto': { main: 'sha1.js', defaultExtension: 'js' },
'rxjs': { main: 'Rx.js', defaultExtension: 'js' },
'moment':{main: 'moment.js', defaultExtension: 'js'},
'angular2-moment': { main: 'index.js', defaultExtension: 'js' },
'app': { main: 'main.js', defaultExtension: 'js' },
'@angular/common': { main: 'index.js', defaultExtension: 'js' },
'@angular/compiler': { main: 'index.js', defaultExtension: 'js' },
'@angular/core': { main: 'index.js', defaultExtension: 'js' },
'@angular/http': { main: 'index.js', defaultExtension: 'js' },
'@angular/platform-browser': { main: 'index.js', defaultExtension: 'js' },
'@angular/platform-browser-dynamic': { main: 'index.js', defaultExtension: 'js' },
'@angular/router': { main: 'index.js', defaultExtension: 'js' },
'@angular/testing': { main: 'index.js', defaultExtension: 'js' },
'@angular/upgrade': { main: 'index.js', defaultExtension: 'js' },
'@angular/forms': { main: 'index.js', defaultExtension: 'js' },
}
}
System.config(config);
})(this);
var packages = {
'app': { format: 'register', defaultExtension: 'js' },
'rxjs': { defaultExtension: 'js' },
'angular2-in-memory-web-api': { defaultExtension: 'js' }
};
var packages = {
'app': { main: 'main.js', defaultExtension: 'js' },
'rxjs': { main: 'Rx.js', defaultExtension: 'js' },
'angular2-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' }
};