ng编译器看不到node_module(错误“找不到名称'模块'”)

时间:2019-07-09 11:33:21

标签: angular typescript npm

错误:

  

src / app / app.component.ts:4:12-错误TS2591:找不到名称   “模块”。您是否需要为节点安装类型定义?尝试npm i @types/node,然后将node添加到tsconfig的类型字段中。

     

4 moduleId:module.id,

当我尝试运行“ ng build”以编译我的角度文件时,每次出现“ module”变量用法时都会出错。我确定模块在那里,我可以在node_modules文件夹中看到它,也可以按住Ctrl键并单击它,然后打开包含模块var的文件。

我尝试删除整个node_modules目录,然后重新安装。

到目前为止,我一直在学习tsconfig.json,所以一直保持不变,但是这里是:

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "downlevelIteration": true,
    "experimentalDecorators": true,
    "module": "esnext",
    "moduleResolution": "node",
    "importHelpers": true,
    "target": "es2015",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ]
  },
  "angularCompilerOptions": {
    "fullTemplateTypeCheck": true,
    "strictInjectionParameters": true
  }
}

这是ts组件中的用法示例:

import { Component } from '@angular/core';

@Component({
    moduleId: module.id,
    selector: 'app',
    templateUrl: 'app.component.html'
})

export class AppComponent { }

也许与我的项目结构有关,因为我不确定要使用哪种项目结构。我正在尝试使用以下结构构建弹簧+角形贴合:

structure

角度应用的结构应该正确,因为它是由ng new命令生成的

angular.json中的输出路径设置为“ outputPath”:“ ../ public”,应位于资源目​​录中。

您有什么好主意吗?

2 个答案:

答案 0 :(得分:0)

您可以在组件装饰器中删除模块属性。您不再需要写@Component({ moduleId: module.id })module.id也不会被webpack自动添加。也许您在这里引用的是旧教程或代码,这就是为什么module.id仍然存在的原因。

有关更多信息,请参考此答案-Angular - What is the meanings of module.id in component?

答案 1 :(得分:0)

我通过从tsconfig.app.json中删除以下内容来解决此问题:

"compilerOptions": {
  "outDir": "./out-tsc/app",
  "types": []
},

并将其添加到编译器选项下的tsconfig.json中

"types": ["node"]

似乎编译器需要此“ types”:[“ node”]选项才能找到模块,而且似乎默认情况下,此选项在tsconfig.app.json中已被覆盖。.

如果有人对我有很好的解释,我将在几天之内不回答这个问题:-)

// EDIT:对此有更好的解决方案,我检查了答案是否正确。

谢谢