systemjs - 映射到不同的URL

时间:2016-02-19 18:18:07

标签: node.js angular systemjs

我是angular 2和systemjs的新手,我有一个示例node.js项目,我试图将子文件夹'。/client/dashboard'中的角度2应用程序映射到子URL'localhost:3000 / dashboard'使用express.static中间件:

app.use('/dashboard', express.static(__dirname + '/client/dashboard', { maxAge: 86400000 }));

angular 2 app folder structure

我的index.html有以下代码:

<base href="/dashboard">
<link rel="stylesheet" href="dashboard/styles.css">
<script src="dashboard/node_modules/angular2/bundles/angular2-polyfills.js"></script>
<script src="dashboard/node_modules/systemjs/dist/system.src.js"></script>
<script src="dashboard/node_modules/rxjs/rx.js"></script>
<script src="dashboard/node_modules/angular2/bundles/angular2.dev.js"></script>
<script src="dashboard/node_modules/angular2/bundles/router.dev.js"></script>
<script src="dashboard/node_modules/angular2/bundles/http.dev.js"></script>
<script>
System.config({
    baseURL: '/dashboard',
    // paths: {
    //     '*': 'dashboard/*'
    // },
    map: {
        app: '/dashboard/app',
        rxjs: '/dashboard/node_modules/rxjs',
        angular2: '/dashboard/node_modules/angular2'
    },
    packages: {
        app: { format: 'register', defaultExtension: 'js' },
        rxjs: { defaultExtension: 'js' },
        angular2: { defaultExtension: 'js' }
    }
});
System.import('app/main').then(null, console.error.bind(console));
</script>

我得到的唯一错误是rx.ts上的'require is not defined'和css文件中的404(参见附件pic chrome errors

如果我只是将angular 2 app目录映射到'/',我仍然在rx.ts上得到任意'require is not defined'错误,但页面加载正确,所以我很确定不是问题。我看到的唯一其他错误是css错误。任何想法可能是什么问题? TIA

1 个答案:

答案 0 :(得分:0)

也许是因为你包括两次rxjs和angular2:一次使用脚本元素,另一次使用SystemJS配置。

为什么需要在SystemJS配置中定义它们?

修改

这应该足够了:

<base href="/dashboard">
<link rel="stylesheet" href="dashboard/styles.css">
<script src="dashboard/node_modules/angular2/bundles/angular2-polyfills.js"></script>
<script src="dashboard/node_modules/systemjs/dist/system.src.js"></script>
<script src="dashboard/node_modules/rxjs/rx.js"></script>
<script src="dashboard/node_modules/angular2/bundles/angular2.dev.js"></script>
<script src="dashboard/node_modules/angular2/bundles/router.dev.js"></script>
<script src="dashboard/node_modules/angular2/bundles/http.dev.js"></script>
<script>
  System.config({
    baseURL: '/dashboard',
    map: {
      app: '/dashboard/app'
    },
    packages: {
      app: {
        format: 'register', defaultExtension: 'js'
      }
    }
  });
  System.import('app/main').then(null, console.error.bind(console));
</script>