it-source

유형 설명: 모듈 외부에서 가져오기 문을 사용할 수 없습니다.

criticalcode 2023. 3. 17. 21:40
반응형

유형 설명: 모듈 외부에서 가져오기 문을 사용할 수 없습니다.

노드 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년에 이 문제에 대해 사용 가능한 해결책을 더 잘 보여주기 위해 업데이트했습니다.


합니다.importECMAScript(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/nodeImport를 공통으로 변경합니다.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하다.

솔루션은 다음과 같습니다.

  1. "type": "module"package.json
  2. "target": "ESNext" ★★★★★★★★★★★★★★★★★」"module": "NodeNext"tsconfig.json했습니다)"module": "ESNext") 잘
  3. *.ts 추가, " "jsimport { 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

반응형