这是https://github.com/systemjs/builder/issues/611
的交叉发布我尝试使用systemjs-builder 0.15.16 buildStatic
方法捆绑我的Angular 2 rc 1应用。角度组件具有视图以及脚本外部的一个或多个样式表。它们在one of two ways
@Component
元数据中引用
使用绝对路径:
@Component({
templateUrl: 'app/some.component.html',
styleUrls: ['app/some.component.css']
})
使用现在推荐的相对路径:
@Component({
moduleId: module.id,
templateUrl: 'some.component.html',
styleUrls: ['some.component.css']
})
我的应用程序使用相对路径,事情一直很好。今天我决定使用systemjs-builder' buildStatic
。只要存在相对路径,生成的文件就会抛出404错误,因为浏览器正在提取localhost/some.component.html
而不是localhost/app/some.component.html
。以下是我的 gulpfile.js
var appDev = 'dev/';
var appProd = 'app/';
var typescript = require('gulp-typescript');
var tsProject = typescript.createProject('tsconfig.json');
var Builder = require('systemjs-builder');
var sourcemaps = require('gulp-sourcemaps');
gulp.task('build-ts', function () {
return gulp.src(appDev + '**/*.ts')
.pipe(sourcemaps.init())
.pipe(typescript(tsProject))
.pipe(sourcemaps.write())
.pipe(gulp.dest(appProd));
});
gulp.task('bundle',['build-ts'], function() {
var builder = new Builder('', './systemjs.config.js');
return builder
.buildStatic(appProd + '/main.js', appProd + '/bundle.js', { minify: false, sourceMaps: true})
.then(function() {
console.log('Build complete');
})
.catch(function(err) {
console.log('Build error');
console.log(err);
});
});
使用相对路径,如果我只运行build-ts
gulp任务并浏览"常规"事情,事情有效。如果我运行bundle
gulp任务并尝试使用bundle.js
文件浏览应用程序,则在应用程序尝试加载外部模板和样式表的任何位置都会出现404错误。我已尝试通过将templateUrl: 'some.component.html'
更改为templateUrl: './some.component.html'
无效来明确路径的相对性质。硬编码绝对路径似乎是一个坏主意。我错过了什么?
答案 0 :(得分:8)
几天后,我从github上的systemjs成员那里得到a helpful response。
诀窍是什么:在systemjs-builder&#39}方法的配置对象中,将buildStatic
设置为encodeNames
。这条线......
false
...成为
.buildStatic(
appProd + '/main.js',
appProd + '/bundle.js',
{ minify: false, sourceMaps: true}
)
<强> tsconfig.json 强>
.buildStatic(
appProd + '/main.js',
appProd + '/bundle.js',
{ minify: false, sourceMaps: true, encodeNames:false}
)