javascript - Angular2 和 SystemJS : Cannot find module while building a moduleLoader

标签 javascript node.js typescript angular systemjs

上下文是什么?

我正在使用 SystemJS、Angular2 和@ngrx/store 开发一个项目。目前,我正在尝试制作一个简单的模块加载器。

效果很好。事情是这样的:

  • 我在它自己的文件夹中写了一个“模块”,命名如下:namespace@moduleName
  • 我将此文件夹添加到另一个名为 modules 的文件夹中。
  • 当我的应用程序启动时,我的 ModuleLoader(它基本上通过 import {} from 'namespace@moduleName 使模块可用)请求服务器 API(使用 Node)。
  • 除此 API 外,还启动了一个脚本。使用 fs,我正在读取 modules 文件夹的内容,并响应一些关于模块的数据(安装了哪些模块,版本 bla bla bla)。<
  • 回到 ModuleLoader,我阅读了这些信息并配置 SystemJS 以添加这些模块(使用 mappackage)。
  • ModuleLoader 的工作结束了。我可以使用 System.import('core/app').then(null, console.error.bind(console));
  • 启动我的应用程序

我的应用程序启动了。这很简单,对吧?

core/app 指的是 public/core/components/app.component.ts,这是我的 Angular 2 引导组件。

问题是什么?

在我更新代码之前一切正常。我正在体验 Angular 2,所以我的 app.component.ts 看起来像这样:

import { Component, View } from "angular2/core";
import { RouteConfig, ROUTER_DIRECTIVES, Router } from "angular2/router";
import { Devtools } from '@ngrx/devtools';
import { Store } from '@ngrx/store';

import { HomeComponent } from "./home.component";
import { NavComponent } from "./nav.component";
import { MediasComponent } from "./medias.component";
import { changeUrl } from '../actions/locationActions';
import { Store as AppStore } from '../stores/store';

@Component({ selector: 'app-view' })
@View({
    directives: [ Devtools, ROUTER_DIRECTIVES, NavComponent ],
    template: `
        <ngrx-devtools></ngrx-devtools>
        <h1>App</h1>
        <nav-cmp></nav-cmp>
        <router-outlet></router-outlet>
    `
})
@RouteConfig([
    { path: '/home',    name: 'Home',   component: HomeComponent,   useAsDefault: true },
    { path: '/medias',  name: 'Medias', component: MediasComponent }
])
export class AppComponent {
    constructor (private router:Router, private store:Store<AppStore>) {
        router.subscribe(url => store.dispatch(changeUrl(url)));
    }
}

这非常简单,我加载组件并设置一个非常基本的应用程序。我的 HomeComponent 位于同一文件夹 (public/core/components/home.component.ts) 并使用我的 提供的模块模块加载器

// A simple module loaded by the Home. I wonder what this modules does...
import { CounterComponent } from 'test@counter';

但是 app.component.ts 已经改变了!

我希望通过模块构建我的应用程序。所以我决定在模块中重写这个 AppComponent(component@main, component@home, component@medias...)。

我只想在 AppComponent 中包含我的 component@main 模块,这个模块是“模块的核心”。

但是失败了。

Atm,我的 AppComponent 看起来像这样:

import { Component, View } from "angular2/core";
import { Devtools } from '@ngrx/devtools';
import { MainComponent } from 'component@main';

@Component({ selector: 'app-view' })
@View({
    directives: [ Devtools ],
    template: `
        <ngrx-devtools></ngrx-devtools>
        <main-cmp></main-cmp>
    `
})
export class AppComponent { }

太棒了。但是现在我的 shell 中有很多错误(而不是在浏览器中)。

[0] public/src/core/components/app.component.ts(40,31): error TS2307: Cannot find module 'component@main'.
[0] public/src/modules/component@home/src/home.component.ts(2,34): error TS2307: Cannot find module 'test@counter/components'.
[0] public/src/modules/component@main/src/main.component.ts(5,31): error TS2307: Cannot find module 'component@home'.
[0] public/src/modules/component@main/src/main.component.ts(6,30): error TS2307: Cannot find module 'component@nav'.
[0] public/src/modules/component@main/src/main.component.ts(7,33): error TS2307: Cannot find module 'component@medias'.
[0] public/src/modules/component@main/src/main.component.ts(8,27): error TS2307: Cannot find module 'core/actions/locationActions'.

等等。

我不明白为什么我的模块没有建立。当我调试 System 时,配置是正确的。 System.map 按路径映射,System.packages 有正确的包。

我的应用程序是一个空白屏幕(只有@ngrx/devtools)并且没有日志输出。

你有什么想法吗? 如果需要,我可以提交我的项目并与您分享代码库。

感谢阅读这个烦人的问题:-D

最佳答案

我只是发现了我的错误。

我只需要在 AppComponent 的指令中注入(inject) MainComponent。

我把这个问题留在这里,以防你对我的工作流程等有一些建议。

子问题 是,我怎样才能删除那些日志?它们确实很容易出错。

关于javascript - Angular2 和 SystemJS : Cannot find module while building a moduleLoader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36328035/

相关文章:

javascript - 应该在哪里加载 vue.js 脚本?

node.js - Visual Studio 2017 Node.js 异常不起作用

node.js - Node Express 中间件一次调用两次输出 console.log()?

具有继承性的 Typescript 装饰器

html - 如何在 HTML 中使用 typescript 以表格格式插入数组元素

javascript - 如何在EJS中包含内容?

javascript - 如何使用 JavaScript 测试来自外部数据库内容的 HTML div?

javascript - CSS - 如何水平居中表格谁的位置是绝对的

mysql - _BAD_FIELD_ERROR : Unknown column 'table' in 'field list' with objection. js+mysql

visual-studio-2013 - 如何在定义文件中引用 Typescript 枚举