【问题标题】:Please explain this SystemJs config请解释这个 SystemJs 配置
【发布时间】:2017-03-20 16:15:44
【问题描述】:

我正在尝试学习 angular2,但是我坚持使用 SystemJS 配置。

<!DOCTYPE html>
<html>
<head>
    <title>Reloyalty Administration Dashboard</title>

    <!-- Viewport mobile tag for sensible mobile support -->
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="icon" href="/favicon.ico">

    <!-- For Angular2 Routing -->
    <base href="/">


    <!-- Common Scripts-->
    <script src="/common/js/jquery-1.11.3.min.js"></script>

    <!--SCRIPTS-->
    <script src="/bootstrap/js/bootstrap.min.js"></script>
    <script src="/dashboard/js/bootstrap-switch.js"></script>
    <script src="/dashboard/js/calendar-conf-events.js"></script>
    <script src="/dashboard/js/chartjs-conf.js"></script>
    <script src="/dashboard/js/common-scripts.js"></script>
    <script src="/dashboard/js/easy-pie-chart.js"></script>
    <script src="/dashboard/js/form-component.js"></script>
    <script src="/dashboard/js/gritter-conf.js"></script>
    <script src="/dashboard/js/jquery-ui-1.9.2.custom.min.js"></script>
    <script src="/dashboard/js/jquery.backstretch.min.js"></script>
    <script src="/dashboard/js/jquery.dcjqaccordion.2.7.js"></script>
    <script src="/dashboard/js/jquery.nicescroll.js"></script>
    <script src="/dashboard/js/jquery.scrollTo.min.js"></script>
    <script src="/dashboard/js/jquery.sparkline.js"></script>
    <script src="/dashboard/js/jquery.tagsinput.js"></script>
    <script src="/dashboard/js/jquery.ui.touch-punch.min.js"></script>
    <script src="/dashboard/js/sparkline-chart.js"></script>
    <script src="/dashboard/js/tasks.js"></script>
    <script src="/dashboard/js/zabuto_calendar.js"></script>
    <script src="/dashboard/js/bootstrap-inputmask/bootstrap-inputmask.min.js"></script>
    <script src="/dashboard/js/chart-master/Chart.js"></script>
    <script src="/dashboard/js/fancybox/jquery.fancybox.js"></script>
    <script src="/dashboard/js/fullcalendar/fullcalendar.min.js"></script>
    <script src="/dashboard/js/gritter/js/jquery.gritter.js"></script>
    <script src="/dashboard/js/jquery-easy-pie-chart/jquery.easy-pie-chart.js"></script>
    <script src="/js/node_modules/es6-shim/es6-shim.min.js"></script>
    <script src="/js/node_modules/reflect-metadata/Reflect.js"></script>
    <script src="/js/node_modules/systemjs/dist/system-polyfills.js"></script>
    <script src="/js/node_modules/systemjs/dist/system.src.js"></script>
    <script src="/js/node_modules/zone.js/dist/zone.js"></script>
    <script src="/js/node_modules/rxjs/bundles/Rx.js"></script>
    <!--SCRIPTS END-->

    <script>


        System.config({
            packages: {
                app: {
                    format: 'register',
                    defaultExtension: 'js',
                    main: 'main.js'
                },
                '@angular/core': {
                    main: 'bundles/core.umd.js',
                    defaultExtension: 'js'
                },
                '@angular/compiler': {
                    main: 'bundles/compiler.umd.js',
                    defaultExtension: 'js'
                },
                '@angular/common': {
                    main: 'bundles/common.umd.js',
                    defaultExtension: 'js'
                },
                '@angular/platform-browser-dynamic': {
                    main: 'bundles/platform-browser-dynamic.umd.js',
                    defaultExtension: 'js'
                },
                '@angular/platform-browser': {
                    main: 'bundles/platform-browser.umd.js',
                    defaultExtension: 'js'
                },
                rxjs: {
                    main: 'bundles/Rx.umd.min.js',
                    defaultExtension: 'js'
                }
            },
            map: {
                'app': '.', // where my app is. '.' means relative
                '@angular': '/js/node_modules/@angular',
                'rxjs': '/js/node_modules/rxjs'
            }
        });
        System.import('management/main')
                .then(null, console.error.bind(console));
    </script>

    <!-- end AngularJS 2-->
</head>

<body>

<my-app>Loading...</my-app>

</body>
</html>

我的文件结构是:

management/
├── app/
│   ├── app.component.ts
|   ├── root.module.ts
├──main.ts

main.ts:

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import {RootModule} from "./app/root.module";

platformBrowserDynamic().bootstrapModule(RootModule);

root.module.ts:

import { NgModule }       from '@angular/core';
import { BrowserModule  } from '@angular/platform-browser';
import { AppComponent }   from './app.component';


@NgModule({
    imports:      [BrowserModule], // what my Angular Application needs
    declarations: [AppComponent], // the view classes that belong to this module.
    bootstrap:    [AppComponent], // which class to boostrap
})
export class RootModule {}

app.component.ts:

import {Component} from '@angular/core';
@Component({
    selector: 'my-app',
    template: '<h1>BLAAH is best !!! OMGOMGOMG blagh assdsdasd</h1>'
})
export class AppComponent { }

我已阅读 systemjs 提供的所有文档,但似乎无法理解配置中发生了什么。

例如,如果我写:

System.import('main')
                .then(null, console.error.bind(console));

我在控制台中收到这些错误?

GET http://merchant.localhost:1337/main.js 404 (Not Found)
Error: (SystemJS) XHR error (404 Not Found) loading http://merchant.localhost:1337/main.js(…)

================================================ ============================

------------------------------------编辑 1--------- ----------------------

================================================ ============================

我变了:

System.config({
        packages: {
            app: {
                format: 'register',
                defaultExtension: 'js',
                main: 'main.js'
            },
            '@angular/core': {
                main: 'bundles/core.umd.js',
                defaultExtension: 'js'
            },
            '@angular/compiler': {
                main: 'bundles/compiler.umd.js',
                defaultExtension: 'js'
            },
            '@angular/common': {
                main: 'bundles/common.umd.js',
                defaultExtension: 'js'
            },
            '@angular/platform-browser-dynamic': {
                main: 'bundles/platform-browser-dynamic.umd.js',
                defaultExtension: 'js'
            },
            '@angular/platform-browser': {
                main: 'bundles/platform-browser.umd.js',
                defaultExtension: 'js'
            },
            rxjs: {
                main: 'bundles/Rx.umd.min.js',
                defaultExtension: 'js'
            }
        },
        map: {
            'app': 'management', // where my app is. '.' means relative
            '@angular': '/js/node_modules/@angular',
            'rxjs': '/js/node_modules/rxjs'
        }
    });
    System.import('app')
            .then(null, console.error.bind(console));

所以现在我的应用程序位于管理文件夹中,我用“app”启动它,它知道它必须运行 ma​​in.js 等等。这行得通。伟大的。所以我继续创建了一个 root.component.html 现在没有加载。 这是代码:

root.component.ts:

import {Component} from '@angular/core';
@Component({
    selector: 'root-component',
    templateUrl: 'root.component.html'
})
export class RootComponent { }

还有错误:

GET http://merchant.localhost:1337/root.component.html 404 (Not Found)

【问题讨论】:

    标签: angular systemjs


    【解决方案1】:

    看来您确实需要将app 映射到management 文件夹而不是.。您已经重命名了您的根目录,这就是您似乎遇到这些麻烦的原因。

    您还需要在包中修复 main: './main.js' 并使用 app 作为模块名称。

    那么发生的情况是,您告诉 System.Js 有一个名为 app 的包,您可以在 ./management/main.js 下找到它。

    附:我不是 System.Js 的超级专家,所以我可能错了,但我设法用 Angular2 教程运行它:)

    【讨论】:

    • 重命名应用程序:'。'到 app:'management' 然后 System.import('main') 给我“GET merchant.localhost:1337/main 404 (Not Found)”
    • 您应该导入app 而不是main。 System.js 不知道“主要”是什么。
    • 我认为您还需要将包修复为main: './main.js'
    • 我将发布一个带有更改和当前错误的 EDIT :)
    • 你需要在里面使用module.id:moduleId:module.id。不确定所有细节,但长话短说,它允许相对引用文件而不是从根目录。见这里:stackoverflow.com/questions/37178192/…
    猜你喜欢
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 2015-02-25
    • 2012-12-27
    • 2017-05-15
    • 1970-01-01
    相关资源
    最近更新 更多