[node.js] TypeScript 오류 TS2304 : 이름 ‘require’을 (를) 찾을 수 없습니다.
첫 번째 TypeScript 및 DefinitelyTyped Node.js 응용 프로그램을 시작하고 실행 중이며 일부 오류가 발생하려고합니다.
간단한 TypeScript Node.js 페이지를 변환하려고하면 “TS2304 : 이름 ‘필수’를 찾을 수 없습니다”라는 오류가 발생합니다. Stack Overflow 에서이 오류가 여러 번 발생했으며 비슷한 문제가 있다고 생각하지 않습니다. 쉘 프롬프트에서 다음 명령을 실행 중입니다.
tsc movie.server.model.ts.
이 파일의 내용은 다음과 같습니다.
'use strict';
/// <reference path="typings/tsd.d.ts" />
/* movie.server.model.ts - definition of movie schema */
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var foo = 'test';
var mongoose=require('mongoose')
라인 에 오류가 발생 합니다.
typings / tsd.d.ts 파일의 내용은 다음과 같습니다.
/// <reference path="node/node.d.ts" />
/// <reference path="requirejs/require.d.ts" />
.d.ts 파일 참조는 적절한 폴더에 배치되어 다음 명령에 의해 typings / tsd.d.ts에 추가되었습니다.
tsd install node --save
tsd install require --save
생성 된 .js 파일이 제대로 작동하는 것처럼 보이므로 오류를 무시할 수 있습니다. 그러나이 오류가 발생하는 이유와 내가 뭘 잘못하고 있는지 알고 싶습니다.
답변
빠르고 더러운
require를 사용하여 파일이 하나만 있거나 데모 목적으로이 작업을 수행하는 경우 TypeScript 파일 맨 위에 require를 정의 할 수 있습니다.
declare var require: any
TypeScript 2.x
TypeScript 2.x를 사용하는 경우 더 이상 타이핑 또는 한정된 유형을 설치할 필요가 없습니다. 다음 패키지를 설치하십시오.
npm install @types/node --save-dev
Typings 및 tsd와 같은 도구는 계속 작동하며 원활한 전환을 위해 해당 커뮤니티와 함께 작업 할 것입니다.
다음을 포함하도록 src /tsconfig.app.json을 확인하거나 편집하십시오 .
...
"types": [ "node" ],
"typeRoots": [ "../node_modules/@types" ]
...
파일이 src 폴더에 있고 루트 app 폴더에없는 파일인지 확인하십시오 .
이러한 옵션 중 하나를 지정 하지 않으면 @types 아래의 모든 패키지가 이미 빌드에 포함되어 있습니다. 더 읽어보기
TypeScript 1.x
타이핑 (DefinitelyTyped 대체)을 사용하면 GitHub 리포지토리에서 직접 정의를 지정할 수 있습니다.
타이핑 설치
npm install typings -g --save-dev
DefinitelyType의 저장소에서 requireJS 유형 정의를 설치하십시오.
typings install dt~node --save --global
웹팩
Webpack을 빌드 도구로 사용하는 경우 Webpack 유형을 포함 할 수 있습니다.
npm install –save-dev @ types / webpack-env
tsconfig.json
아래에서 다음으로 업데이트하십시오 compilerOptions
.
"types": [
"webpack-env"
]
이를 통해 require.ensure
다른 웹팩 특정 기능 을 수행 할 수 있습니다 .
앵귤러 CLI
CLI를 사용하면 위의 Webpack 단계를 수행하고 “types”블록을에 추가 할 수 있습니다 tsconfig.app.json
.
또는 사전 설치된 node
유형을 사용할 수 있습니다. 여기에는 실제로 사용할 수없는 클라이언트 측 코드에 대한 추가 유형이 포함됩니다.
"compilerOptions": {
// other options
"types": [
"node"
]
}
답변
TypeScript 2.x 의 경우 다음 두 단계가 있습니다.
-
를 정의하는 패키지를 설치하십시오
require
. 예를 들면 다음과 같습니다.npm install @types/node --save-dev
-
TypeScript에 전역으로 포함 시키도록 지시하십시오
tsconfig.json
.{ "compilerOptions": { "types": ["node"] } }
두 번째 단계는와 같이 전 세계적으로 사용 가능한 기능에 액세스해야하는 경우에만 중요합니다 require
. 대부분의 패키지에서는 import package from 'package'
패턴을 사용해야합니다 . 위의 tsconfig.json types 배열에 모든 패키지를 포함시킬 필요는 없습니다.
답변
당신은 할 수 있습니다
declare var require: any
또는보다 포괄적 인 지원을 위해서는 DefinitelyTyped의 require.d.ts를 사용하십시오.
또한 대신에 var mongoose = require('mongoose')
다음을 시도해보십시오.
import mongoose from 'mongoose' // or
import mongoose = require('mongoose')
답변
이 답변은 최신 설정과 관련이 있습니다 (TypeScript 2.x, Webpack > 2.x).
당신은 하지 않습니다 설치해야 @ Node.js를 유형의 모든이며, 프런트 엔드 코드에 대한 무관 유형 / 노드를 (실제로 일을 복잡 등등 setTimout 다른 반환 값으로 ..
당신은 할 유형 @ 설치할 필요가 / 웹팩-ENV
npm i -D @types/webpack-env
이는 웹팩는 (포함 있는지 런타임 서명 부여 require
, require.ensure
등)
또한 tsconfig.json 파일에 ‘types’배열이 설정되어 있지 않은지 확인하십시오-> node_modules / @ types 폴더에서 모든 유형 정의를 가져옵니다.
유형 검색을 제한하려면 typeRoot 특성을 node_modules / @ types로 설정할 수 있습니다.
답변
대신에:
'use strict';
/// <reference path="typings/tsd.d.ts" />
시험:
/// <reference path="typings/tsd.d.ts" />
'use strict';
즉, 참조 경로가 먼저입니다.
답변
제 경우 src/tsconfig.app.json
에는 tsconfig.json
설정 을 재정의 하는 매우 어리석은 문제 였습니다 .
그래서 나는 이것을 가지고 있었다 tsconfig.json
:
"types": [
"node"
]
그리고 이것은 src/tsconfig.app.json
:
"types": []
이 오류로 인해 회색 머리카락이 생겼으므로 누군가이 도움이되기를 바랍니다.
답변
참고로 Angular 7.1.4 , TypeScript 3.1.6 을 사용하고 있으며이 행을 추가하는 것이 유일한 방법입니다 tsconfig.json
.
"types": ["node"], // within compilerOptions