[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

선언 파일의 미래 (6/15/2016)

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 의 경우 다음 두 단계가 있습니다.

  1. 를 정의하는 패키지를 설치하십시오 require. 예를 들면 다음과 같습니다.

    npm install @types/node --save-dev
  2. 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