Typescript module Import/Export

euNung·2022년 6월 8일
1

타입스크립트

목록 보기
7/10
      {
        "compilerOptions": {
       // -----------[ Node ]---------- //
          "module": "CommonJS",
       // ----------------------------- //
          "target": "es5",
          "lib": [
            "dom",
            "ESNext"
          ],
          "sourceMap": true,
          "esModuleInterop": true,
          "moduleResolution": "Node",
          "downlevelIteration": true,
          "noImplicitAny": false,
        },
        "exclude": [
          "node_modules"
        ]
      }
  • 브라우저 환경
  1. module을 "ES2015" 또는 "ESNEXT"로 바꿔준다.
      {
        "compilerOptions": {
       // ------------[ 브라우저 ]------------- //
          "module": "ES2015",
       // ------------------------------------ //
          "target": "es5",
          "lib": [
            "dom",
            "ESNext"
          ],
          "sourceMap": true,
          "esModuleInterop": true,
          "moduleResolution": "Node",
          "downlevelIteration": true,
          "noImplicitAny": false,
        },
        "exclude": [
          "node_modules"
        ]
      }
  1. html파일의 script 구문에 type="module" 속성을 설정해주어야 한다.

✅ 브라우저 환경에서 node_modules에 있는 모듈을 import하기 위해서는 webpeck을 통한 번들링 같은 방법으로 경로 해결을 해야한다.
=> ES2015 모듈은 경로가 존재해야 import/export 가능
=> node_modules에 있는 모듈을 import 할 때는 경로x
=> webpack을 통해 번들링하여 해당 파일 가져오기 가능

[ 링크 참조 ]
https://stackoverflow.com/questions/67809878/how-to-import-node-modules-in-simple-typescript

  • NPM 패키지 모듈들은 CommonJS를 기본 모듈 시스템으로 채택
  • ReactJS에서 NPM 패키지 모듈을 불러오기 위해 ES6 문법으로 코드를 작성하지만 문제가 발생하지 않는 이유
    : Babel 등의 컴파일러가 ES6 문법의 코드를 CommonJs 기반의 코드로 변환해줌 => Webpack에 의해 JavaScript 모듈들의 번들링이 가능해짐
  • ts-loader
    : TypeScript 컴파일러인 tsc를 사용하고, tsconfig.json의 설정을 따름
    [ 링크 참조 ]
    https://webpack.kr/guides/typescript/#loader
// webpack.dev.js 설정
const path = require("path");

module.exports = {
    mode: "development",
    devtool: "inline-source-map",
    entry: {
        app: "./src/index",
    },
    resolve: {
        extensions: [".ts", ".js"],
    },
    module: {
        rules: [
            {
                test: /\.ts?/,
                use: [
                    "babel-loader",
                    {
                        loader: "ts-loader",
                    },
                ],
                exclude: /node_modules/,
            },
        ],
    },
    output: {
        path: path.resolve(__dirname + "/dist"),
        publicPath: "/dist",
        filename: "index.js",
    },
    devServer: {
        devMiddleware: { publicPath: "/dist" },
        static: { directory: path.join(__dirname) },
        hot: true,
    },
};
profile
프론트엔드 개발자

0개의 댓글