typescript 사용시 절대 경로를 사용하기 위해서는 아래 두 가지 File 을 변경해야 합니다.
- tsconfig.json
- 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