유형 설명: 모듈 외부에서 가져오기 문을 사용할 수 없습니다.
노드 js(07.10.19의 경우 node.js의 최신 버전) 앱에 기본 내보내기 없이 노드 모듈을 Import하는 .ts 파일이 있습니다.는 이런.import { Class } from 'abc';
.Cannot use import statement outside a module
.
네트워크에는 이 문제에 대한 많은 해결책이 있지만(.js의 경우) 타이프 스크립트 파일이 있기 때문에 도움이 되지 않습니다.제 코드는 다음과 같습니다.
import { Class } from 'abc';
module.exports = { ...
execute(a : Class ,args : Array<string>){ ...
여기 tsconfig.json이 있습니다.
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"strict": true
}
}
업데이트: 이 답변이 중요한 뷰를 얻고 있기 때문에 2022년에 이 문제에 대해 사용 가능한 해결책을 더 잘 보여주기 위해 업데이트했습니다.
합니다.import
ECMAScript(ES) 모듈을 고려하지 않는 것으로 합니다.에 추가하면 ES 모듈을 사용 중임을 노드에 알립니다.다만, TypeScript 컴파일러에 이 타입의 모듈을 출력하도록 지시할 필요가 있습니다."module": "es2015"
그 이상( 상예 ( : : ) or or :"es2020"
의 in ) ) 。tsconfig.json
. Common(공통) JS JS)require
를 설정합니다."module": "commonjs"
.
모듈 시스템을 프로젝트 수준에서 설정하지 않으려는 경우 보다 세부적인 옵션이 있습니다.「 」가 .mjs
ES 모듈로 됩니다.단, "ES"의 파일은 "ES"로 취급됩니다..cjs
됩니다.JS "4.부터는 TypeScript 4.5를 할 수 ".mts
★★★★★★★★★★★★★★★★★」.cts
가 '확장'을 내보내도록 ..mjs
★★★★★★★★★★★★★★★★★」.cjs
파일을 각각 표시합니다.
두 시스템은 부분적으로 호환됩니다.예를 들어 Common을 Import할 수 있습니다.ES 모듈로의 JS 모듈 디폴트내보내기:
// in an ES module
import thing from "./main.cjs";
뒤바꿔서요.ES 모듈을 Common으로 Import할 수 있습니다.동적 Import 기능이 있는 JS 모듈(이 기능이 작동하려면 ES2020 기능이 필요합니다):
// in a CommonJS module
const thing = await import("./main.mjs");
원본 답변(2020):
" " " "type": "module"
로로 합니다.package.json
모듈을 에 의해단, 이 경우 ES2015를 에 이 .이것에 의해 에러가 해소됩니다.단, Typescript에 대해서, 이 타입의 모듈을 생성하도록 지시할 필요가 있습니다."module": "es2015"
"commonjs"
tsconfig.json
.
, ES6는 ES6를 사용하지만 ES6는 ES6를 .import {}
common을 JSmodule.exports = {}
ES에 관한 정보입니다.은 두 가 있습니다. 즉, 두 가지입니다.
- module.exports는 유지하되 이 파일을 공통으로 해석하도록 노드에게 지시합니다..cjs 확장자를 붙여서 JS를 만듭니다.
- export 문을 ES2015 구문으로 변경합니다.
export function execute(…)..
첫 번째 옵션은 컴파일러가 .js 파일을 출력하고 항상 .cjs로 변경해야 하기 때문에 조금 까다로울 수 있습니다.두 번째 옵션을 사용하면 노드(버전 < 13.8의 경우 --experimental-modules 플래그 포함)를 사용하여 파일을 실행할 수 있습니다.
반드시 commonJ를 사용해야 하는 경우 Node의 유형 정의를 설치하는 것이 좋습니다.@types/node
Import를 공통으로 변경합니다.JS 형식:require('abc')
나머지 설정은 그대로 유지합니다(단,"type": "commonjs"
패키지화 합니다.명시적)으로 합니다.
혹시 사용 중이신 경우ts-node
에서 컴파일러 옵션을 설정할 수 있습니다.tsconfig.json
특히를 위해ts-node
사용할 수 있습니다.
{
"ts-node": {
// these options are overrides used only by ts-node
// same as the --compilerOptions flag and the TS_NODE_COMPILER_OPTIONS environment variable
"compilerOptions": {
"module": "commonjs"
}
},
"compilerOptions": {
"module": "esnext"
}
}
그러면 스크립트를 쉽게 실행할 수 있습니다.
$ ts-node my-script.ts
다음 사항을 확인합니다."main"
에 참가하다.package.json
컴파일된 파일을 가리키고 있습니다.index.js
가 아니라index.ts
저도 비슷한 문제가 있었어요.nodemon을 설치하고 항상 스크립트를 시작해야 했습니다.nodemon index.ts
yarn add -D nodemon
패키지.json
"scripts": {
"start": "nodemon index.ts"
}
또는 명령줄에서 파일을 지정합니다.
패키지.json
"scripts": {
"nodemon": "nodemon $1"
}
얻을 수 있는 많은 가능성이 있을 수 있어
SyntaxError: 모듈 외부에서 Import 문을 사용할 수 없습니다.
를 실행합니다.
제 설정에서는 모듈을 Import하고 있었습니다.AbModule
(AbModule
품격이 있다AbClassName
)를 스크립트에서 참조해 주세요.testab.ts
.
testab.ts
가졌다import stmt
,
import {AbClassName} = 'testAdapterDir/AbModule.po.ts';
하지만,AbModule
모두 가지고 있었다*.ts
파일, 파일도*.js
파일이 존재하지 않았습니다.수정은,
아래 코드 실행 중 오류가 발생할 수 있지만 무시해도 됩니다.
cd AbModule path
tsc *.ts
, 이제AbModule
된 모든 합니다.*.js
run나를. 이제 도망쳐.testab.ts
가 더이상 하지 않는다는 되었습니다.
방법:"type": "module"
이 아닙니다.
- 을 바꾸다
.ts
로로 합니다..mts
- 려려를
ts-node --esm file.mts
tsconfig.json
★★★★★★★★★★★★★★★★★★:
{
"compilerOptions": {
"incremental": true,
"target": "ESNext",
"module": "ESNext",
"allowJs": true,
"checkJs": false,
"outDir": "./dist",
"sourceMap": true,
"strict": true,
"alwaysStrict": true,
"moduleResolution": "node",
"esModuleInterop": true
},
"include": ["**/*"]
}
Node TypeScript 1 건 node node 。몇 했는데, ESM이 되었을 때."target"
★★★★★★★★★★★★★★★★★」"module"
tsconfig.json
로로 합니다.ESNext
모듈 외부에서 Import 스테이트먼트를 사용할 수 없습니다(Import 스테이트먼트를 Import하다.
솔루션은 다음과 같습니다.
"type": "module"
package.json
"target": "ESNext"
★★★★★★★★★★★★★★★★★」"module": "NodeNext"
tsconfig.json
했습니다)"module": "ESNext"
) 잘-
*.ts
추가, " "js
import { AccountGroup } from "./AccountGroup.js"
전도)AccountGroup.ts
삭제)
솔루션은 여기에서 발견되었으며, 이 소스에서 영감을 얻었습니다.
»tsconfig.json
디폴트래픽:
"ts-node": {
"compilerOptions": {
"module": "CommonJS"
}
}
언급URL : https://stackoverflow.com/questions/58273824/typescript-cannot-use-import-statement-outside-a-module
'it-source' 카테고리의 다른 글
Spring Boot 및 Logback을 사용하여 콘솔에 대한 휴지 상태 로깅을 피할 수 없음 (0) | 2023.03.17 |
---|---|
React-Router와의 액티브링크 (0) | 2023.03.17 |
AngularJS에서 속성을 조건부로 적용하는 가장 좋은 방법은 무엇입니까? (0) | 2023.03.12 |
WordPress에서 최종 사용자 로그인 페이지를 만드는 방법 (0) | 2023.03.12 |
지킬 블로그에 사이트 검색 기능을 추가하려면 어떻게 해야 합니까? (0) | 2023.03.12 |