[JavaScript] express() 에서 "express is not a function"다음에 TS 의 "export ="와 "import = require()"

Express를 로드할 때 express is not a function 와 나왔기 때문에 원인과 해결책을 공유합니다.
다음에 export =import = require() 에 대해입니다.

환경



import측은 JavaScript, 트랜스파일이라든지는 일절 없음.
node: v14.1.0

package.json
{
  ...
  "type": "module",
  "dependencies": {
    "express": "^4.17.1",
    ...
  },
  ...
}

재현 VTR



index.js
import * as express from "express";
const app = express();
node ./index.js

실행하면
const app = express();
            ^
TypeError: express is not a function

오류 발생.
덧붙여서, USAGE에 따랐다. 1

@types/express/index.d.ts
/* =================== USAGE ===================

    import * as express from "express";
    var app = express();

 =============================================== */

원인



CommonJS와 ESModulesd에서 반환되는 값에 차이가있었습니다.
import * as express from "express";
console.log(typeof express); // => object
const express = require("express");
console.log(typeof express); // => function

import
default: [Function: createApplication] { ... }

require
[Function: createApplication] { ... }

즉, 반환값이 default export가 되었기 때문에 참조 에러를 일으키고 있었다.

대응책



이렇게 한다.
import express from "express";
const app = express();

또는,
import * as express from "express";
const app = express.default();

원래 트랜스 파일도 없이 사용한다면, CommonJS 모듈이라면 CommonJS의 임포트 ( const express = require("express"); ) 로 읽어들이는 것이 베터라고 하는 쯔코미는 각오하고 있습니다!

이후 덤



export =



이름은 "내보내기 대입".
Express의 형태 정의 파일을 들여다 보면 이렇게 되어 있다.

@types/express/index.d.ts
...
/**
 * Creates an Express application. The express() function is a top-level function exported by the express module.
 */
declare function e(): core.Express;
...
export = e;

CommonJS와 AMD를 고려하지 않고 내보낼 수 있는 편리한 기능.
즉, 이것은 CommonJS 또는 AMD 모듈입니다. 라는 표시.

import = require()



이름은 「가져오기 대입」.
내보내기 할당 ( export = )을 사용하여 내보낸 모듈을 가져올 때 사용되는 것 같습니다.
지금은 굳이 사용하는 이유는 없을 것 같다.

가져오기 할당, 가져오기 할당 사용 예


// export側
function hoge() {
  return 'hoge';
}
const fuga = 'fuga';
export = {
  hoge,
  fuga
};

// import側
import hogefuga = require('./export');
console.log(hogefuga); // => { hoge: [Function: hoge], fuga: 'fuga' }

감상



수수함에 시간을 녹여 기사로 해 주었어. .
뭔가 지적 등 있으면 댓글 주시면 다행입니다.

참고



export = and import = require()



어느 시점의 소스 https://魏Tub. 작은 m/df란 칸d/데피에서 lyTy페d/bぉb/06002c2C495359그림 b97C48f71f3f6bc장 c25c7225/ty페s/그림 xp레스/인으로 x. d. ts  

좋은 웹페이지 즐겨찾기