webpack升级后找不到命名空间NodeJS

Posted

技术标签:

【中文标题】webpack升级后找不到命名空间NodeJS【英文标题】:Cannot find namespace NodeJS after webpack upgrade 【发布时间】:2017-08-13 22:27:53 【问题描述】:

我有使用 WebPack 构建的 Angular2 应用程序。我将 WebPack 从 v1.8 升级到 v2,一切似乎都运行良好。唯一的问题是旧代码有以下内容:

import Timer = NodeJS.Timer;
....
apptInterval: Timer;
....
this.apptInterval = setInterval(() =>  ... , 1000);

升级后出现错误:TS2503: Cannot find namespace 'NodeJS'.

tsconfig.json 看起来像这样:


"compilerOptions": 
   "target": "es5",
   "module": "commonjs",
   "moduleResolution": "node",
   "sourceMap": true,
   "emitDecoratorMetadata": true,
   "experimentalDecorators": true,
   "lib": ["es2015", "dom"],
   "noImplicitAny": true,
   "suppressImplicitAnyIndexErrors": true
   

Angular/Webpack 的文档不再有 typings.json;但是,即使我从 Webpack 1 目录复制,也无济于事。内容是typings.json是


"globalDependencies": 
  "jasmine": "registry:dt/jasmine#2.2.0+20160621224255",
  "node": "registry:dt/node"
  

有趣的是,如果我删除对 NodeJS 的引用,一切正常。像这样:

apptInterval: any;
....
this.apptInterval = setInterval(() =>  ... , 1000);

如果我在 F12 调试器下查看,apptInterval 的类型是ZoneTask。我确信有一种方法可以使它成为强类型,但它让我无法理解。我发现的唯一建议是运行typings install dt~node --global --save-dev(它本质上会更新typings.json,但没有帮助。

【问题讨论】:

【参考方案1】:

对于 TypeScript@2.0+,使用 @types:

npm install -D @types/node @types/jasmine

如果您仍想继续使用 typings,请将 typings/index.d.ts 包含到您的 tsconfig.json 中:


  "include": [   // or "files"
    "typings/index.d.ts"
  ]

【讨论】:

不幸的是,这两个选项都没有任何区别。 在 VSCode 中打开你的代码,查看智能感知中是否存在NodeJS。它应该在那里你有正确的设置。 谢谢!我忘记在 include 数组中的 tsconfig.app.json 中包含 "**/*.d.ts"。现在我的自定义类型定义再次起作用了。【参考方案2】:

如果您的工作目录中还有 tsconfig.app.json,请尝试将属性 node 添加到 types 字段。喜欢:

  
  "extends": "../tsconfig.json",
  "compilerOptions": 
    "outDir": "../out-tsc/app",
    "module": "es6",
    "baseUrl": "",
    "types": ["node"] --> ADD THIS
  ,
  "exclude": [
    "test.ts",
    "**/*.spec.ts"
  ]

【讨论】:

@LuigiRubino 很高兴我能帮上忙! 它也对我有用!注意:它也解决了之前的 webpack 编译错误:Cannot find name 'require'。 (错误 ts2304)【参考方案3】:

向类型添加节点对我不起作用,"types": ["node"] 但向类型根添加节点却可以


  "compilerOptions":
  
    ...
    "typeRoots": [
    "node_modules/@types"
    ]
  

【讨论】:

【参考方案4】:

我正在运行 Angular 12 并且启用了严格模式,我必须将 Fzum 和 johnny S 的答案都添加到我的 tsconfig.app.json 中。唯一一次没有在控制台中抛出错误是当我同时拥有两者时。

我的 tsconfig.app.json 看起来像这样:


  "compilerOptions":
  
    ...
    "types": ["node"],
    "typeRoots": [
    "node_modules/@types"
    ]
  

很抱歉将其作为单独的答案,我还没有足够的声誉来发表评论

【讨论】:

以上是关于webpack升级后找不到命名空间NodeJS的主要内容,如果未能解决你的问题,请参考以下文章

升级到 Visual Studio 2017 后找不到 Microsoft.VisualStudio.TestTools.LoadTesting

也找不到类型节点的命名空间“NodeJS”

在Composer更新后找不到Symfony AbstractController

在 Ionic 2 中使用 NodeJS.Timer 时找不到命名空间 NodeJS

重命名后找不到情节提要

命名空间“NodeJS”没有导出成员“Require”