【问题标题】:No Exported Member / Node Modules没有导出的成员/节点模块
【发布时间】:2016-12-18 10:17:09
【问题描述】:

我刚刚使用here 找到的 5 分钟快速入门来启动 Angular 2 / Typescript。我遇到了看起来很常见的问题,但可能有点不同。我遇到了各种“无导出成员”问题。例子:

来自 app.module.ts:

import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

返回

...node_modules/@angular2/core/index" has no exported member 'NgModule'.

...@angular/platform-browser/index" has no exported member 'BrowserModule'.

并且来自 main.ts:

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';

抛出:

...@angular/platform-browser-dynamic/index" has no exported member 'platformBrowserDynamic'.

我正在运行 node 版本 4.4.7 和 npm 版本 3.10.5。

我知道这些问题可能可以通过将 node 或 npm 回滚到与教程相关的版本在教程的上下文中解决。我想我更喜欢解释如何使教程中的代码与当前版本的节点相关。

ETA:这些错误发生在编译时,而不是执行时。

【问题讨论】:

    标签: angularjs node.js angular typescript typescript-typings


    【解决方案1】:

    Editor 缓存问题,常见于 IDE 的 Android Studio、VS Code 和 Atom。 重新启动编辑器/IDE 会有所帮助。

    【讨论】:

      【解决方案2】:

      请将 package.json 中的所有 @angular 依赖项至少更新为“2.0.0-rc.5”

      然后在 main.ts 中验证您的应用程序引导程序。

      根据 2.0.0-rc.5 的更改日志,引导您的应用程序发生了变化。或另见更新的教程指南https://angular.io/guide/quickstart

      import {NgModule} from '@angular/core';
      
      @NgModule({
        declarations: […], // directives, components, and pipes owned by this NgModule
        imports: [BrowserModule],
        providers: […], // additional providers
        bootstrap: [MainComponent],
      })
      class MyAppModule {}
      
      // Ahead of Time compile
      import {platformBrowser} from ‘@angular/platform-browser’;
      
      platformBrowser().bootstrapModuleFactory(MyAppModuleNgFactory);
      
      // JIT compile long form
      import {platformBrowserDynamic} from ‘@angular/platform-browser-dynamic’;
      
      platformBrowserDynamic().bootstrapModule(MyAppModule);
      

      【讨论】:

        【解决方案3】:

        在 package.json 文件中,所有使用 rc.4 的依赖项,将它们替换为 rc.5。然后就可以了。

        【讨论】:

          【解决方案4】:

          对我来说,这是 VSCode 编辑器的问题。只需重新打开编辑器即可解决它

          【讨论】:

          • 这与 Atom 完全相同。我什至不需要关闭它,只是擦除并再次输入,并且没有更多的ts错误。
          • FWIW,我认为两个编辑器中都有一个重新加载功能(Cmd + Shift + P,开发人员:VSCode 中的重新加载窗口,在 Atom 中可能类似)也可以解决此问题而无需关闭/重新打开
          【解决方案5】:

          NgModule 类是通过node_modules/@angular/core/index.d.ts 之一从node_modules/@angular/core/src/metadata.d.ts 文件导出的。

          我想知道您是否在tsconfig.json 文件中正确指定了moduleResolution 属性:

          {
            "compilerOptions": {
              "target": "es5",
              "module": "commonjs",
              "moduleResolution": "node", // <-----
              "sourceMap": true,
              "emitDecoratorMetadata": true,
              "experimentalDecorators": true,
              "removeComments": false,
              "noImplicitAny": false
            }
          }
          

          【讨论】:

          • 分辨率就是这样。诚然,我手动键入教程的每个文件只是为了习惯语法,但是一旦我遇到编译错误,我要做的第一件事就是返回并用源代码中的直接复制/粘贴替换我手动键入的工作。在这种情况下,您发布的正是我的 tsconfig.json 的内容
          • 也许我说的太直白了,但是我的 metadata.d.ts 或 index.d.ts 文件中都没有导出 NgModule。事实上,'NgModule' 根本没有出现在任何一个文件中。
          • 真的!您使用哪个版本的 Angular2,因为它出现在 RC5 中...看看您的 package.json 文件。
          • 2.0.0-rc.4。那是直接来自链接的源代码
          • 我将在我的 package.json 中更改它,看看是否能解决问题。
          猜你喜欢
          • 1970-01-01
          • 2017-05-20
          • 2017-05-07
          • 2017-08-18
          • 1970-01-01
          • 2021-07-08
          • 2017-09-09
          • 2022-01-12
          相关资源
          最近更新 更多