development

typescript 오류 TS2304 : 이름 'require'를 찾을 수 없습니다

big-blog 2020. 2. 22. 11:40
반응형

typescript 오류 TS2304 : 이름 'require'를 찾을 수 없습니다


첫 번째 Typescript 및 DefinitelyTyped 노드 앱을 시작하고 실행 중이며 일부 오류가 발생하려고합니다.

간단한 ts 노드 페이지를 변환하려고 할 때 "TS2304 : 이름 '필수'를 찾을 수 없습니다"오류가 표시됩니다. SO 에서이 오류가 여러 번 발생했으며 비슷한 문제가 있다고 생각하지 않습니다.
쉘 프롬프트에서 다음 명령을 실행하고 있습니다 : 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와 같은 도구는 계속 작동하며 원활한 전환을 위해 해당 커뮤니티와 함께 ​​노력할 것입니다.

선택 사항 : 당신이 지정하는 경우 typeroots또는 types당신을에서 tsconfig.json. tsconfig.json노드를 유형으로 포함 하도록 업데이트해야 할 수도 있습니다 . 기본적으로 @types 아래의 모든 패키지 는 이러한 옵션 중 하나를 지정 하지 않으면 빌드에 이미 포함되어 있습니다. 더 읽어보기

아래는 이러한 각 옵션에 대한 올바른 구성입니다.

{
    "compilerOptions": {
        // types option has been previously configured
         "types": [
            // add node as an option
            "node"
         ],
         // typeRoots option has been previously configured
         "typeRoots": [
            // add path to @types
            "node_modules/@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).

@ types / node (모든 node.js 유형이며 프론트 엔드 코드와 관련이 없으며 실제로 setTimout과 같은 반환 값 등을 복잡하게 함)을 설치할 필요가 없습니다.

@ types / webpack-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';

즉, 참조 경로가 먼저입니다.


해결책은 TSD 명령을 사용하는 것입니다.

tsd install node --save

어떤 typings/tsd.d.ts파일을 추가 / 업데이트 하고 해당 파일에는 노드 응용 프로그램에 필요한 모든 유형 정의가 포함됩니다.

내 파일 맨 위에 다음 tsd.d.ts과 같은 참조를 넣었습니다 .

/// <reference path="../typings/tsd.d.ts" />

2016 년 1 월 현재 요구 사항은 다음과 같이 정의됩니다.

declare var require: NodeRequire;

interface NodeModule {
    exports: any;
    require: NodeRequireFunction;
    id: string;
    filename: string;
    loaded: boolean;
    parent: any;
    children: any[];
}

참고로 Angular 7.1.4 , typescript 3.1.6을 사용 하고 있으며 내가해야 할 유일한 것은이 줄을 추가하는 것입니다tsconfig.json

    "types": ["node"], // within compilerOptions

그것이 도움이되기를 바랍니다.


Peter Varga의 대답가져 와서 사전 프로세스 로더를declare var require: any; 사용하여 모든 .ts 파일에서 일반적으로 작동하는 일반 솔루션으로 만들었습니다 .

  1. 전 처리기 로더 설치 :

    npm install preprocessor-loader
    
  2. 로더를 webpack.config.js에 추가하십시오 ( TypeScript 소스를 처리하기 위해 ts-loader사용하고 있습니다).

    module: {
        loaders: [{
            test: /\.tsx?$/,
            loader: 'ts-loader!preprocessor?file&config=preprocess-ts.json'
        }]
    }
  1. 모든 소스에 임시 해결책을 추가 할 구성을 추가하십시오.
{
    "line": false,
    "file": true,
    "callbacks": [{
        "fileName": "all",
        "scope": "source",
        "callback": "(function shimRequire(source, fileName) { return 'declare var require: any;' + source; })"
    }]
}

더 강력한 require.d.ts 를 같은 방식으로 추가 할 수는 있지만 declare var require: any;제 상황에서는 충분했습니다.

참고 전처리 1.0.5의 버그있다 , 그래서 그냥 당신이 마지막에 여분의 줄 간격 반환이 있고 괜찮을거야하게 마지막 줄에 차단한다,.


나는이 문제로 어려움을 겪고있다. 나는 이것이 모든 릴리스 후보 일명 rc에서 작동한다고 생각 하지만 테스트하지는 않았습니다. 들어 @angular rc.2 그것은 잘 작동합니다.

  1. core-jsnpm 종속성으로 추가package.json
  2. 운영 typings install core-js --save
  3. 의 모든 "es6-shim"발생을 제거 하십시오 package.json. 더 이상 필요하지 않습니다.

건배!


때때로 tsconfig.json에서 "jasmine"이 누락되면이 오류가 발생할 수 있습니다. (타입 스크립트 2.X)

그래서 추가

"types": [
  "node",
  "jasmine"
]

tsconfig.json에


전자 + 각도 2/4 추가 : ts.config에 'node'유형을 추가하는 것 외에도 다양한 파일을 입력하면 최종적으로 types.d.ts 파일 옆에 추가합니다.

declare var window: Window;
interface Window {
  process: any;
  require: any;
}

내 경우는 전자 + 각도 2/4로 발전하고 있습니다. 나는 전 세계적으로 창문이 필요했습니다.


설치했는지 확인하십시오 npm i @types/node


'mongoose'에서 몽구스로 가져 오기 *


  1. 코드를 변환하는 데 사용할 모듈을 지정 했습니까?
    tsc --target es5 --module commonjs script.ts
    NodeJS 코드를 컴파일하고 있음을 트랜스 파일러에게 알리려면이를 수행해야합니다. 문서 .

  2. 몽구스 정의도 설치해야합니다
    tsd install mongoose --save

  3. var변수를 선언 하는 사용하지 마십시오 (필요한 경우가 아니면 매우 드문 경우) let. 대신 사용하십시오. 그것에 대해 더 알아보기


위의 트릭을 사용하여 '필수'오류를 해결할 수 없었습니다.

하지만 문제는 이전 버전 (1.8.6.0)과 오늘 최신 버전이 (2.0.6.0) 인 Visual Studio 용 타이프 툴이 문제라는 것을 알았습니다.

다음 도구에서 최신 버전의 도구를 다운로드 할 수 있습니다.

https://www.microsoft.com/en-us/download/details.aspx?id=48593


TypeScript 1.x에 대한 cgatian 의 답변 외에도

여전히 오류가 표시되면 컴파일러 옵션에 index.d.ts를 구체적으로 제공하십시오.

"files": [
    "typings/index.d.ts"
]

당신은 코드 있지만 '필요'비주얼 스튜디오 2천15마르크 오류 텍스트 오류 등의 기능 컴파일 할 경우 이름을 찾습니다 '요구'할 수없는 또는 해결 기호가 '필요'할 수없는 최신 버전의 Visual Studio 2015 타이프 라이터를 업데이 트를 (지금 2.1.5) ReSharper (사용하는 경우)를 2016.3.2 이상으로 업데이트하십시오.

나는이 성가신 문제를 잠시 동안 가지고 있었고, 해결책을 찾지 못했지만 마침내이 방법으로 해결했습니다. 이것이 누군가에게 도움이되기를 바랍니다.


다음에 추가하십시오 tsconfig.json:

"typeRoots": [ "../node_modules/@types" ]

npm install @types/node포함 node되어 있고를 포함하여 이전의 모든 답변을 바탕으로 한 또 다른 답변이 tsconfig.json / compilerOptions / types있습니다.

내 경우 tsConfig.json에는 Angular 앱 에이 베이스 를 확장 하는베이스 와 별도 의베이스가 있습니다 .

{
"extends": "../../tsconfig.json",
"compilerOptions": {
   "outDir": "../out-tsc/app",
   "types": []
 },

내 문제는 이것에 비어 types있었습니다 tsconfi.app.json. 기본 구성의 문제를 막습니다.


제 경우 src/tsconfig.app.json에는 tsconfig.json설정 을 재정의 하는 매우 어리석은 문제 였습니다 .

그래서 나는 이것을 가지고 있었다 tsconfig.json:

    "types": [
      "node"
    ]

그리고 이것은 src/tsconfig.app.json:

    "types": []

이 오류로 인해 회색 머리카락이 생겼으므로 누군가이 도움이되기를 바랍니다.


ts 파일 에서이 문제에 직면 한 경우에만 일정한 값을 제공하기 만하면됩니다.

.ts 파일의 이름을 .js 파일로 바꾸십시오

오류가 다시 발생하지 않습니다.

참고 URL : https://stackoverflow.com/questions/31173738/typescript-getting-error-ts2304-cannot-find-name-require



반응형