TypeScript를 사용하여 VS 코드에서 모듈 "fs"를 찾는 방법은 무엇입니까?


83

MacBook Air에서 실행 중입니다. VS Code를 IDE로 설치하고 TypeScript도 설치했습니다.

이 줄만있는 간단한 파일이 있습니다.

import fs = require('fs');

괄호 안의 'fs'아래에 빨간색 물결 모양이 표시되고 오류 메시지는 [ts] Cannot find module 'fs'.The file has a .ts extension입니다. JavaScript와 TypeScript를 처음 접했지만 fs핵심 모듈 이라는 인상을 받았는데 어떻게 찾을 수 없습니까? 문제를 어떻게 해결합니까?

내가 이미 시도한 다른 것 :

  • 간단한 함수 본문을 파일에 넣은 다음 명령 줄에서 tsc. 본질적으로 동등한 오류가 발생합니다.error TS2307: Cannot find module 'fs'.
  • 명령 줄에서 sudo npm install fs -g. 이것은 명백한 성공을보고하지만 문제를 해결하지는 않습니다.

나는 SE와 웹을 둘러 보았지만 거의 비슷해 보이는 대답은 'fs'를 사용할 수 있다고 가정하는 것처럼 보입니다.


이 코드를 확실히 실행하고 node있습니까?
peteb

계획은 노드로 실행하는 것입니다. 현재 응용 프로그램에 대한 로컬 파일 액세스가 정상입니다. @peteb
Brick

답변:


95

노드에 대한 정의 파일을 포함해야합니다.

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) 감사합니다!
Brick

@Brick 예, 작동합니다. 대답의 명령은 방금 릴리스 된 1.0을 입력하는 것입니다
David Sherret 2016 년

이것은 오래되었습니다. 요즘 유형은 일반적으로 아래 Abe의 대답과 같이 npm과 함께 설치해야 합니다 .
dshepherd

원사 :yarn add @types/node --dev
조나단 H

을 설치 한 후 @types/node코드를 다시 시작해야 모듈을 올바르게 인식 할 수 있습니다. 이는 네이티브 노드 모듈의 경우에만 해당되며 코드 빌드에 따라 문제가되지 않을 수도 있습니다.
Don

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 문 구문이 약간 벗어난 것 같습니다. 시험:

import * as fs from "fs";

아, Node의 타이핑은 포함되어 있지 않습니다. 이 파일과 참조 경로를 추가해보십시오. github.com/DefinitelyTyped/DefinitelyTyped/blob/master/node/…
Eric N

1
@EricN 페이지는 404로 이어집니다. 모듈이 전체 NodeJs 코어의 일부인 경우에도 입력이 필요합니까?
Jacks

네, 타이핑이 필요합니다. 노드는 Typescript로 작성되지 않았으므로 Typescript가 찾는 유형 데이터가 없습니다. 정의 파일은 해당 유형의 모든 데이터를 제공합니다.
Eric N

21

tsconfig.json에서 "moduleResolution"을 "node"로 설정하기 만하면됩니다.

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

실행하다

npm install @types/node --save-dev

이제 표준 TypeScript 가져 오기를 사용할 수 있습니다.

import * as fs from "fs";

시도하지만 여전히 같은 문제가 점점
Pardeep 자이나교

1
@pardeepjain, 혹시 오래된 typescript가 있습니까? vscode를 사용하십니까? 상태 표시 줄에서 Typescript 버전을 확인합니다.
yrtimiD

4

tsconfig.json(여기 : Node 11+) 에는 세 가지 옵션이 있습니다. 문서 참조 :

하나 에서 지정할 모두 typeRootstypestypeRoots또는 제거 완전히 두 줄 (권장) :

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

설치 유형 :

npm install --save-dev @types/node

약속 기반 파일 시스템 사용 (예 : 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

2

Typescript는 규칙에 따라 모듈에 대해 알고 있습니다. 자세한 내용은 모듈 확인 을 확인 하세요.

또한 IDE가 fs모듈에 대해 알기 위해서는 노드에 대한 타이핑을 제공해야합니다.

github 문제 도 확인하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.