import Fotmob from 'fotmob';
const fotmob = new Fotmob();
let matches = await fotmob.getMatchesByDate("20201020");
let league = await fotmob.getLeague("42", "overview", "league", "America/New_York")
let team = await fotmob.getTeam("6017", "overview", "team", "America/New_York")
let player = await fotmob.getPlayer("1071179")
let details = await fotmob.getMatchDetails("3399269")
이런식으로 예제가 작성되어있습니다.
npm install fotmob 후 위와 같이 예제를 작성하고 node app.js으로 파일을 실행해본 결과
var fotmob = new Fotmob();
^
TypeError: Fotmob is not a constructor
이러한 에러가 나네요.
fotmob이 class인데 왜 constructor가 아니라는 내용의 error가 나는걸까용…
Node.js 환경에서는 import 문법을 기본적으로 사용할 수 없습니다. 기존의 CommonJS 형태인 require 문법을 사용해야 합니다. 타입스크립트로 작성된 라이브러리를 Node.js 환경에서 사용하려면 타입스크립트 코드를 자바스크립트로 변환한 후 require 문법을 이용해 라이브러리를 불러와야 합니다.
아래는 코드를 수정한 예시입니다:
// 타입스크립트 코드에서 자바스크립트로 변환된 파일을 불러옵니다.
const Fotmob = require('fotmob').default;
const fotmob = new Fotmob();
const getMatches = async () => {
let matches = await fotmob.getMatchesByDate("20201020");
let league = await fotmob.getLeague("42", "overview", "league", "America/New_York");
let team = await fotmob.getTeam("6017", "overview", "team", "America/New_York");
let player = await fotmob.getPlayer("1071179");
let details = await fotmob.getMatchDetails("3399269");
};
getMatches();
node의 기본값이 commonjs인것은 맞지만 ES Module을 아주 사용할 수 없는 것은 아닌 것으로 알고 있습니다. 다만, Fotmob 모듈 같은 경우 아예 처음부터 Typescript로 만들어졌고, 빌드하는 과정에서 ES Module이 아닌 CommonJS를 타겟으로 빌드되었습니다.
해당 예제는 typescript 파일을 기본으로 하는 것 같습니다. 아마도, 저 예제대로 하시려면 typescript로 import 문법대로 작성하고, package.json이랑 tsconfig.json을 세팅하셔서 써야할 것 같아요.
순수 자바스크립트만으로 해결하려면 위에 댓글 달아주신 분 말씀대로 commonJS 스타일의 모듈( require 함수로 불러오는 방식 ) 을 써야 할 것 같아요.