TypeScriptを使用してVSCodeでモジュール「fs」を見つける方法は?


83

私はMacBookAirで走っています。VS Codeを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」が利用可能であると想定しているようです。


あなたは間違いなくこのコードをnode
peteb 2016年

はい、ノードで実行する予定です。現在のアプリケーションでは、ローカルファイルへのアクセスは問題ありません。@peteb
ブリック

回答:


96

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

TypeScript 2.0+

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

npm install --save-dev @types/node

TypeScript <2.0

タイピングを使用する場合は、次のコマンドを実行できます。

typings install dt~node --global --save

または、1.0未満のタイピングを使用している場合は、次のコマンドを実行します。

typings install node --ambient --save

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


1
編集前に持っていたコマンドを使用しましたが、それでうまくいきました。(typings install node --ambient --save)ありがとう!
ブリック2016年

@Brickはい、うまくいきます。答えのコマンドは、リリースされたばかりの1.0を入力するためのものです
David Sherret 2016年

これは時代遅れです。最近のタイプは、以下の阿部の答えのように、通常npmでインストールする必要があります
dshepherd 2018

糸付き:yarn add @types/node --dev
ジョナサンH

インストール後@types/node、モジュールを正しく認識させるためにコードを再起動する必要がある場合があります。これはネイティブノードモジュールの場合にのみ当てはまるはずであり、コードのビルドによっては問題にならない場合もあります。
ドン

50

以前の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
}
}

32

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

import * as fs from "fs";

ああ、ノードのタイピングは含まれていません。このファイルと参照パスを追加してみてください:github.com/DefinitelyTyped/DefinitelyTyped/blob/master/node/…–
Eric N

1
@EricNページは404につながります。モジュールがNodeJsコア全体の一部であっても、入力が必要ですか?
ジャックス2017年

ええ、タイピングが必要です。ノードはTypescriptで記述されていないため、Typescriptが検索するタイプデータはありません。定義ファイルは、そのタイプのデータをすべて提供します。
Eric N

21

必要なのは、tsconfig.jsonで「moduleResolution」を「node」に設定することだけです。

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

実行する

npm install @types/node --save-dev

これで、標準のTypeScriptインポートを使用できます。

import * as fs from "fs";

試しましたが、それでも同じ問題が発生します
PardeepJain19年

1
@pardeepjain、古いタイプスクリプトを持っている可能性はありますか?vscodeを使用していますか?ステータスバーでTypescriptのバージョンを確認してください。
yrtimiD

4

tsconfig.json(ここでは:ノード11+)には3つのオプションがあります。ドキュメントを参照してください

いずれかspecifiy両方typeRootstypes、のみtypeRootsまたは削除完全に両ライン(推奨)。

{"compilerOptions": {
  ...
  "typeRoots": ["node_modules/@types"],  // "typeRoots": [] -> won't work
  "types": ["node"]                      // "types": [] -> won't work
}}

インストールの種類:

npm install --save-dev @types/node

promiseベースのファイルシステムを使用する(たとえば、async / awaitを使用する):

import {promises as fs} from 'fs';

async function foo() {
    ...
    await fs.writeFile('./yourPath', 'YourContent');
}

.d.tsファイルを配置するための宣言フォルダーを作成し、typeRoots配列を作成したとき、compilerOptionsを指定していなかっnode_modules/@typesたため、エラーが発生しました。それをtypeRootsアレイに追加すると、再び機能しました。
str8up7od

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.