react typescript absolute path

Hyor·2022년 1월 5일
0
post-thumbnail
post-custom-banner

typescript 사용시 절대 경로를 사용하기 위해서는 아래 두 가지 File 을 변경해야 합니다.

  1. tsconfig.json
  2. webpack.config.js

tsconfig.js 에는 conpilerOptions 에 baseUrl를 추가해야 합니다.

"baseUrl": "src",

tsconfig.json

{
  "compilerOptions": {
    "outDir": "./dist/",
    "noImplicitAny": true,
    "lib": ["esnext", "dom"],
    "module": "esnext",
    "target": "es5",
    "jsx": "react",
    "allowJs": true,
    "moduleResolution": "node",
    "baseUrl": "src",
    "allowSyntheticDefaultImports": true
  }
}

이렇게만 해도 경로을 찾을 수 있지만 webpack에서는 인식을 하지 못합니다.
따라서 webpack.config.js에 resolve modules 를 추가합니다.

modules: [path.resolve(__dirname, "src"), "node_modules"],

webpack.config.js

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
  mode: "development",
  entry: {
    index: "./src/index.tsx",
  },
  devtool: "inline-source-map",
  devServer: {
    compress: true,
    port: 3000,
    historyApiFallback: true,
    open: true,
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: "public/index.html",
      favicon: "public/favicon.png",
    }),
  ],
  output: {
    filename: "js/[name].js",
    path: path.resolve(__dirname, "dist"),
    clean: true,
    publicPath: "/",
  },
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        use: ["babel-loader"],
        exclude: /node_modules/,
      },
      {
        test: /\.tsx?$/,
        use: "ts-loader",
        exclude: /node_modules/,
      },
      {
        test: /\.css$/i,
        use: ["style-loader", "css-loader"],
      },
      {
        test: /\.(png|svg|jpg|jpeg|gif)$/i,
        type: "asset/resource",
      },
    ],
  },
  resolve: {
    modules: [path.resolve(__dirname, "src"), "node_modules"],
    extensions: [".tsx", ".ts", ".js"],
  },
};

준비가 완료되면 index.tsx 에 들어가서

import App from "./App"; -> "App";

위와 같이 경로를 변경하여 실행하면 잘 실행되는걸 확인할 수 있다.

github

잘못된 부분 지적환영입니다.

참고자료
https://www.typescriptlang.org/tsconfig
https://webpack.js.org/configuration/resolve/#resolveextensions

profile
개발 노트
post-custom-banner

0개의 댓글