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 그들의 것들.
수입이 왜 그렇게 되어야 하는지에 대한 추가적인 설명을 누구라도 가지고 있는 것처럼 자유롭게 덧붙이세요.
'개발하자' 카테고리의 다른 글
펄럭임: 현재 Flutter SDK 버전이 0.0.0-unknown입니다 (1) | 2023.11.03 |
---|---|
Jupyter 노트북에서 셀 출력을 지우기 위한 키보드 단축키 (1) | 2023.11.02 |
Kubernetes : StatefulSet에서 관리하는 특정 포드를 다시 만들지 않고 삭제하는 방법? (0) | 2023.11.01 |
Flutter 데스크탑 응용 프로그램에서 글로벌 키보드 단축키를 등록하는 방법은 무엇입니까? (1) | 2023.11.01 |
호스트를 Kubernetes의 서비스 경로로 리디렉션할 수 있습니까? (0) | 2023.10.31 |