angular - 配置 SystemJS 以加载我的 Angular 2 组件

标签 angular typescript systemjs commonjs

我正在从 ng1 升级到 ng2。我添加了 Angular 2 并成功导入了它的模块:

<script src="/node_modules/systemjs/dist/system.src.js"></script>
<script src="/node_modules/rxjs/bundles/Rx.js"></script>
<script src="/node_modules/angular2/bundles/angular2.dev.js"></script>
<script src="/node_modules/angular2/bundles/http.dev.js"></script>
<script src="/node_modules/angular2/bundles/router.dev.js"></script>

我添加了以下配置:

 <script>
        System.config({
          packages: {
            app: {
              format: 'cjs',
              defaultExtension: 'js'
            }
          }
        });

        System.import('scripts/bootstrap.js').then(null, console.error.bind(console));

 </script>

现在我正在尝试添加我的第一个 ng2 组件/模块并导入它:

它使用 TypeScript 编写的组件:

import {Component} from 'angular2/core';

@Component({
  selector: 'my-component',
  templateUrl: 'app/components/my-component/my-component.html',
  styleUrls: ['app/components/my-component/my-component.css'],
  providers: [],
  directives: [],
  pipes: []
})
export default class MyComponent {

  constructor() {}

}

导入我的组件:

从 './components/my-component/my-component' 导入 MyComponent;

组件的ES5编译代码为:

var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") return Reflect.decorate(decorators, target, key, desc);
    switch (arguments.length) {
        case 2: return decorators.reduceRight(function(o, d) { return (d && d(o)) || o; }, target);
        case 3: return decorators.reduceRight(function(o, d) { return (d && d(target, key)), void 0; }, void 0);
        case 4: return decorators.reduceRight(function(o, d) { return (d && d(target, key, o)) || o; }, desc);
    }
};
var core_1 = require('angular2/core');
var MyComponent = (function () {
    function MyComponent() {
    }
    MyComponent = __decorate([
        core_1.Component({
            selector: 'my-component',
            templateUrl: 'app/components/my-component/my-component.html',
            styleUrls: ['app/components/my-component/my-component.css'],
            providers: [],
            directives: [],
            pipes: []
        })
    ], MyComponent);
    return MyComponent;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = MyComponent;

结果是找404错误

http://localhost:9000/scripts/components/my-component/my-component

现在,我明白我应该:

  1. 使用 script 标签加载我的组件文件,类似于我对 Angular2 包所做的。这以 JS 错误结束:required is undefined。这是因为我的文件未正确捆绑
  2. 配置 SystemJS/Typescript,这样它就知道加载我的模块,而无需向我的 html 添加脚本标签。

我在这里错过了什么?

最佳答案

在您的情况下,系统配置中的包应该是“脚本”。它应该与文件夹名称匹配。因为您将其命名为“app”,所以它不会将 defaultExtension“js”添加到模块文件名中

<script>
        System.config({
          packages: {
            scripts: {    // <--- right there
              format: 'cjs',
              defaultExtension: 'js'
            }
          }
        });

        System.import('scripts/bootstrap.js').then(null, console.error.bind(console));

 </script>

关于angular - 配置 SystemJS 以加载我的 Angular 2 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34433300/

相关文章:

typescript - 桶装进口似乎打破了装载顺序

c# - 修复 Angular 6 项目中的显示表

angular - 以这种方式在 Angular 中使用主题是否存在安全风险?

javascript - 函数式编程 : Return first truthy result of calling a list of different functions with a specific argument

typescript - "Cannot find name ' ServiceWorkerRegistration 使用Typescript创建firebase云函数时出现'"错误

javascript - Angular 2 快速入门演示不起作用

javascript - 等待 Angular 5 方法

angular - 如何修复 - 类型 'map' 上不存在属性 'Action'

typescript - 如何对使用 vuex 类的 typescript Vue 组件进行单元测试

javascript - 如何使用 SystemJS 在 Angular2 应用程序中加载 bootstrap.js、jQuery 和其他模块