본문 바로가기

개발하자

Uncatched ReferenceError: 내보내기가 Typescript에 의해 생성된 파일에 정의되지 않았습니다

반응형

Uncatched ReferenceError: 내보내기가 Typescript에 의해 생성된 파일에 정의되지 않았습니다

전자 개발을 위한 타이프스크립트를 시작하려고 합니다. 노드와 jQuery에 대한 타이핑을 받는 것과 씨름한 후, 나는 마침내 내 파일 오류를 무료로 얻었다.

문제는 지금 앱을 실행할 때 다음과 같은 오류가 발생한다는 것이다:

index.js:2 Uncaught ReferenceError: exports is not defined

index.js의 첫 두 줄은 다음과 같다:

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });

그 대사가 그런 줄은 모르겠어요. 타이프스크립트는 컴파일할 때 추가했다. 내 앱을 제거하면 잘 작동한다.

어떻게 하면 이 오류를 없앨 수 있을까요?

아 그리고 여기 내 tsconfig가 있는데, 그게 관련이 있다면.

{
    "compilerOptions": {
        "target": "es6",
        "module": "commonjs",
        "moduleResolution": "node",
        "isolatedModules": false,
        "jsx": "react",
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true,
        "declaration": false,
        "noImplicitAny": false,
        "noImplicitUseStrict": false,
        "removeComments": true,
        "noLib": false,
        "preserveConstEnums": true,
        "suppressImplicitAnyIndexErrors": true
    },
    "exclude": [
        "node_modules",
        "typings/browser",
        "typings/browser.d.ts"
    ],
    "compileOnSave": true,
    "buildOnSave": false,
    "atom": {
        "rewriteTsconfig": false
    }
}



퀵픽스

tsconfig.json에서 로 변경합니다.




새로운 버전의 타이프스크립트 2.2.1에 문제가 있습니다. 이전 버전 2.1.6을 사용해 보십시오. 당신이 나에게 준 것과 똑같은 문제를 해결해 준 것입니다.

컴파일의 버전 2.2.1은 이 행을 추가하지만 이전 버전 2.1.6은 그렇지 않다.




내장된 HTML을 해킹해서 해결했습니다:

<script> var exports = {}; </script>
<script src="index.js"></script>

기본적으로 글로벌 변수인 원하는 것을 제공하는 것입니다.

내 TypeScript(2.3.2)에서 생성된 파일(es6)이 로드됩니다.




Typescript 컴파일러에서 생성된 js 파일에 대해서도 같은 문제가 있었습니다. 동일한 선:

Object.defineProperty(exports, "__esModule", { value: true });

그리고 같은 오류:

game.js:2 Uncaught ReferenceError: exports is not defined

나는 이 파일에서 게임 클래스를 정의하고 있었다. 나는 내 게임.ts 파일의 마지막에 이것을 추가함으로써 문제를 해결했다:

export = Game;

이것으로 타이프스크립트 컴파일러는 다음과 같이 대체되었다:

Object.defineProperty(exports, "__esModule", { value: true });

다음 항목 포함:

module.exports = Game;

이 일 이후로 더 이상의 실수는 없어요.




저도 같은 문제가 있어서, 아래에 언급한 것처럼 파일을 수정했습니다

-- //

-- //

-- //




나도 같은 문제에 직면해 있었고 다른 버전의 타이프스크립트로 변경을 시도했지만 작동하지 않았다.

드디어 알았어요. 소포가 들어있었거든요.json 그리고 내가 제거했을 때 - 효과가 있었어




나는 다음과 같이 내 것을 고쳤다:

tsconfig.json

{
    "compilerOptions": {
        "target": "ESNext",
        "module": "CommonJS",
        "lib": [
            "DOM",
            "ES5"
        ],
        "esModuleInterop": true
    }
}

esModule 추가인터롭

패키지에서 "type": "module"을 제거합니다.json




로 및 로 바꿉니다.

{
  "compilerOptions": {
    "target": "es5",
    "module": "es2015",
    "moduleResolution": "node"
  }
}

이 답변에서 따옴

와 는 우리가 (babel 또는 TypeScript를 사용할 때) 일어날 일이다.




해결책

tsconfig.json

"module": "ESNext",

"target": "ESNext",

색인을 만들다

<script type="module" src="script.js"></script>



코드를 내보낼 필요가 없고 응용 프로그램이 충돌하지 않는 경우:

코드에 전역 변수를 추가할 수 있습니다:

window.exports = {};



이게 모든 사람들에게 효과가 있는 건 아닐지 몰라도

ES 모듈에서는 다음과 같은 로컬 모듈을 가져오기로 되어 있습니다:

import { Car } from "../models/car.js";

TypeScript의 경우 다음을 사용하기로 결정했다:

import { Car } from "../models/car.ts";

이것이 내 코드를 만들었다.

따라서 다음 항목을 가져오십시오:

import { Car } from "../models/car";

안 되면 택배를 확인해 보세요.json, 그리고 그것이 정말로

"type": "module" 

표층으로.

그런 다음, 내 에서 대상과 모듈을 다음과 같이 설정해야 합니다:

"target" : "es6"
"module" : "CommonJS"

TLDR: 그 물건은 제가 수입한 것인데, 만약 안 되면 택배를 꼭 확인하세요.json to have와 you to have 그들의 것들.

수입이 왜 그렇게 되어야 하는지에 대한 추가적인 설명을 누구라도 가지고 있는 것처럼 자유롭게 덧붙이세요.


반응형