首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >systemjs-builder:角2组件相对路径导致404个错误

systemjs-builder:角2组件相对路径导致404个错误
EN

Stack Overflow用户
提问于 2016-05-28 10:02:06
回答 1查看 1.6K关注 0票数 2

这是一个到https://github.com/systemjs/builder/issues/611的交叉柱子

我正在尝试用systemjs-builder0.15.16 buildStatic方法捆绑我的角2rc 1应用程序。角组件具有视图以及脚本外部的一个或多个样式表。它们在@Component元数据中在两种方式之一中被引用。

使用绝对路径:

代码语言:javascript
复制
@Component({
  templateUrl: 'app/some.component.html',
  styleUrls:  ['app/some.component.css']
})

使用现在推荐的相对路径:

代码语言:javascript
复制
@Component({
  moduleId: module.id,
  templateUrl: 'some.component.html',
  styleUrls:  ['some.component.css']
})

我的应用程序使用的是相对路径,而且一切都很好。今天,我决定使用systemjs的buildStatic。当存在相对路径时,生成的文件将抛出404错误,因为浏览器正在获取localhost/some.component.html而不是localhost/app/some.component.html。下面是我的gulpfile.js的相关部分

代码语言:javascript
复制
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'来说明路径的相对性质,但没有效果。硬编码的绝对路径似乎是个坏主意。我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-31 05:50:00

几天后,我从github上的一个systemjs成员那里得到了有帮助的反应

诀窍是:在systemjs的buildStatic方法的配置对象中,将encodeNames设置为false。所以台词..。

代码语言:javascript
复制
.buildStatic(
    appProd + '/main.js', 
    appProd + '/bundle.js', 
    { minify: false, sourceMaps: true}
)

变成..。

代码语言:javascript
复制
.buildStatic(
    appProd + '/main.js', 
    appProd + '/bundle.js', 
    { minify: false, sourceMaps: true, encodeNames:false}
)

其他信息

tsconfig.json

代码语言:javascript
复制
{
  "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"
  ]
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37497635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档