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+) 에는 세 가지 옵션이 있습니다. 문서 참조 :
하나 에서 지정할 모두 typeRoots
와 types
만 typeRoots
또는 제거 완전히 두 줄 (권장) :
{"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');
}