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

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’를 사용할 수 있다고 가정하는 것처럼 보입니다.



답변

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

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

또는 다른 모든 방법이 실패하면 여기 에서 파일을 수동으로 다운로드 하여 프로젝트에 포함 시키십시오.


답변

이전 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
}
}


답변

“fs”는 핵심 노드 모듈이며 import 문 구문이 약간 벗어난 것 같습니다. 시험:

import * as fs from "fs";


답변

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

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

실행하다

npm install @types/node --save-dev

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

import * as fs from "fs";


답변

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');
}


답변

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

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

github 문제 도 확인하십시오.


답변