没有导出的成员/节点模块

Posted

技术标签:

【中文标题】没有导出的成员/节点模块【英文标题】: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:这些错误发生在编译时,而不是执行时。

【问题讨论】:

【参考方案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 中更改它,看看是否能解决问题。

以上是关于没有导出的成员/节点模块的主要内容,如果未能解决你的问题,请参考以下文章

节点模块问题:每个模块只允许一个默认导出

如何从节点模块导出 Typescript 接口?

如何为导出函数的节点模块编写打字稿定义文件?

(节点:52213)警告:在循环依赖中访问模块导出的不存在属性“MongoError”(使用节点--trace-warnings

节点模块导出,访问不存在的属性错误,Jasmine

节点 --experimental-modules,请求的模块不提供名为的导出