web-dev-qa-db-ja.com

TypeScriptを使用してMSコードでモジュール「fs」を見つける方法

MacBook Airで実行しています。 MSコードをIDEとしてインストールし、TypeScriptもインストールしました。

私はこの行だけの簡単なファイルを持っています:

import fs = require('fs');

かっこ内の「fs」の下に波線が赤く表示され、エラーメッセージは[ts] Cannot find module 'fs'.です。ファイルの拡張子は.tsです。私はJavaScriptとTypeScriptを初めて使用しますが、fsはコアモジュールであるという印象を受けていたので、どうして見つからないのでしょうか。問題を修正するにはどうすればよいですか?

私がすでに試した他のこと:

  • ファイルに単純な関数本体を入れ、tscを使用してコマンドラインでコンパイルします。本質的に同等のエラーが表示されます:error TS2307: Cannot find module 'fs'.
  • コマンドラインでSudo npm install fs -g。これは明らかな成功を報告しますが、問題を解決しません。

私はSEとWebをいじりましたが、近いと思われる答えはすべて、「fs」が利用可能であると仮定しているようです。

49
Brick

ノードの定義ファイルを含める必要があります。

TypeScript 2.0 +

Npmを使用してインストールします。

npm install --save-dev @types/node

TypeScript <2.0

typings を使用すると、次のコマンドを実行できます。

typings install dt~node --global --save

または、タイピング<1.0を使用している場合は、次を実行します。

typings install node --ambient --save

または、他のすべてが失敗した場合は、ファイル here を手動でダウンロードし、プロジェクトに含めます。

57
David Sherret

以前のtsdまたはタイピングツールに移動することなく、今より良い方法があります。 NPMには、TypeScript用の@typesパッケージがあります。この例では、パッケージ@types/nodeが必要です。

npm install "@types/node" --save-dev

Save-devオプションを使用して、本番環境ではなく開発モードでのみタイプをインストールしていることを確認してください。 npm install "@ types /"構文を使用するときは、最新のノードライブラリが必要です...

以前のツールではほとんどの場合、最新のnode.d.ts定義ファイルを使用していないため、fsパッケージが見つかりません。

これらのタイプパッケージを見つけるには、tsconfig.jsonファイルを更新する必要があります。 jquery、jqueryui、およびノー​​ドタイプを使用する場合の私の例。コードエディター、この場合は「atom」コードエディターでも機能する構文が必要であると仮定します

{
"compileOnSave": false,
"compilerOptions": {
    "rootDir": "src",
    "sourceMap": true,
    "target": "es5",
    "module": "AMD",
    "declaration": false,
    "noImplicitAny": false,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "moduleResolution": "node",
    "lib": ["es2015", "dom"],
    "baseUrl": "./",
    "typeRoots": [
        "node_modules/@types"
    ],
    "types": [
        "jquery",
        "jqueryui",
        "node"
    ],
    "paths": {
        "src/*": ["src/*"]
    }
},
"exclude": [
    "node_modules",
    "dist",
    "build"
],
"filesGlob": [
    "./src/**/*.ts",
    "./test/**/*.ts",
    "./typings/index.d.ts",
    "./custom_typings/**/*.d.ts",
    "./node_modules/@types/**/*.d.ts"
],
"atom": {
    "rewriteTsconfig": false
}
}
45
Abe

「fs」はコアNodeモジュールであり、インポートステートメントの構文は少しずれていると思います。試してください:

import * as fs from "fs";
19
Eric N

必要なのは、tsconfig.jsonで「node」に設定された「moduleResolution」のみです。

{
  "compilerOptions": {
      ...
      "moduleResolution": "node"
      ...
  }
}

execute

npm install @types/node --save-dev

そして今、あなたは標準のTypeScriptインポートを使用することができます:

import * as fs from "fs";
12
yrtimiD

TypeScriptは規則に基づいてモジュールを認識します。詳細については、 モジュール解像度 を確認してください。

IDEがfsモジュールについて知るためには、ノードの型指定を提供する必要があります。

これも確認してください github issue

2
Madhu Ranjan