Bee*_*ice 2 angularjs typescript systemjs angular
这是https://github.com/systemjs/builder/issues/611的交叉帖子
我正在尝试使用systemjs-builder 0.15.16 buildStatic方法捆绑我的Angular 2 rc 1应用程序.角度组件具有视图以及脚本外部的一个或多个样式表.它们以两种方式之一在@Component元数据中引用
使用绝对路径:
@Component({
templateUrl: 'app/some.component.html',
styleUrls: ['app/some.component.css']
})
Run Code Online (Sandbox Code Playgroud)
使用现在推荐的相对路径:
@Component({
moduleId: module.id,
templateUrl: 'some.component.html',
styleUrls: ['some.component.css']
})
Run Code Online (Sandbox Code Playgroud)
我的应用程序使用相对路径,事情一直很好.今天我决定使用systemjs-builder's 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);
});
});
Run Code Online (Sandbox Code Playgroud)
使用相对路径,如果我只运行build-tsgulp任务并浏览"常规"方式,那么事情就可以了.如果我运行bundlegulp任务并尝试使用该bundle.js文件浏览应用程序,那么在应用程序尝试加载外部模板和样式表的任何地方都会出现404错误.我一直在努力,更明确一些通过改变路径的相对性templateUrl: 'some.component.html',以templateUrl: './some.component.html'没有效果.硬编码绝对路径似乎是一个坏主意.我错过了什么?
几天后,我从github上的systemjs成员那里得到了一个有用的回复.
诀窍是什么:在systemjs-builder的buildStatic方法的配置对象中,设置encodeNames为false.这条线......
.buildStatic(
appProd + '/main.js',
appProd + '/bundle.js',
{ minify: false, sourceMaps: true}
)
Run Code Online (Sandbox Code Playgroud)
成为...
.buildStatic(
appProd + '/main.js',
appProd + '/bundle.js',
{ minify: false, sourceMaps: true, encodeNames:false}
)
Run Code Online (Sandbox Code Playgroud)
tsconfig.json
{
"compilerOptions": {
"target": "ES5",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false,
"outDir": "./app"
},
"filesGlob": [
"./dev/**/*.ts",
"!./node_modules/**/*.ts"
],
"exclude": [
"node_modules",
"typings"
]
}
Run Code Online (Sandbox Code Playgroud)