1. ホーム
  2. angular

[解決済み] webpack のアップグレード後、名前空間 NodeJS が見つからない

2022-02-07 09:44:02

質問

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 (これは本質的にtyping.jsonを更新するものですが、役に立ちません。

解決方法は?

もし、あなたが tsconfig.app.json を作業ディレクトリに追加してください。 ノード タイプ のフィールドを使用します。のように。

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