일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- webpack
- 자바스크립트
- TypeScript
- CA불러오기
- keccak256
- ts-loader
- @debug
- goerli
- 해쉬테이블
- 블록체인
- next.js
- wallet
- HTMLFormElement
- incentive
- JavaScript
- scss
- set-cookie
- 스마트컨트랙트
- methoidID
- next-connect
- 다중서명계약
- geth
- 코딩테스트
- Codestates
- 자료구조
- Goerlifaucet
- S3
- Sass
- Blockchain
- currentTarget
- Today
- Total
Minwook’s portfolio
webpack ts, sass, img loader 설정 본문

필요한 패키지
npm i css-loader sass sass-loader style-loader file-loader url-loader ts-loader typescript
이미지는 url loader와 file loader를 사용한다.
url loader, 파일을 base64로 인코딩하여 번들링파일에 포함된다.
file loader, 파일을 output 경로로 복사해준다.
용량이 적은 파일은 url loader를 사용하고 용량이 큰 파일은 fallback으로 file loader를 사용하는게 좋다.
tsconfig.json 설정
{
"compilerOptions": {
...생략
"typeRoots": ["node_modules/@types", "types"] //타입폴더위치
"outDir": "./dist" //출력경로
}
}
// ./types/image.d.ts
declare module "*.png";
declare module "*.jpg";
declare module "*.jpeg";
확장자명 타입지정 반드시 tsconfig로 설정한 경로에 만들어야한다.

webpack.config.js 전체코드
module.rules의 use는 배열의 가장 뒤 index부터 순차적으로 실행(순서가 중요!)
sass/scss의 경우
sass-loader => css-loader => style-loader 순으로 실행된다.
*style-loader는 css코드는 html/head에 css코드를 입력시켜준다.
module.exports = (option) => {
return {
mode: "development",
entry: "./index.ts",
output: {
filename: "bundle.js",
path: path.resolve(__dirname, "dist"), //절대경로로 입력
//에러를 방지하기 위해 tsconfig.json output path와 일치해야한다.
publicPath: "/dist/", //출력되는 경로
},
devtool: "inline-source-map",
module: {
rules: [
{
test: /\.ts$/,
use: "ts-loader",
//tsconfig가 있음으로 추가구성 configuration을 명시하지 않아도 된다.
exclude: /node_modules/,
},
// Sass 파일 로더 설정
{
test: /\.s[ac]ss$/,
use: [ "style-loader", "css-loader", "sass-loader",],
},
// 이미지 파일 로더
{
test: /\.(png|jpe?g|gif|svg|webp)$/,
use: [
{
loader: "url-loader",
options: {
name: "[name].[ext]", //name: 파일명, ext: 확장자
limit: 10000, //10k까지 url-loader
fallback: "file-loader", //이후 file-loader
},
},
],
},
],
},
resolve: {
extensions: [".ts", ".js"], //생략가능한 확장자 명칭
},
devServer: {
static: { directory: path.resolve(__dirname) },
compress: true,
port: 3000,
},
plugins: [],
};
};
package.json 예시
{
"name": "myproject",
"version": "1.0.0",
"main": "index.ts",
"scripts": {
"start": "webpack server",
"build": "webpack --config webpack.config.prod.js"
},
"dependencies": {
"css-loader": "^6.7.3",
"file-loader": "^6.2.0",
"sass": "^1.58.3",
"sass-loader": "^13.2.0",
"style-loader": "^3.3.1",
"ts-loader": "^9.4.2",
"typescript": "^4.9.5",
"url-loader": "^4.1.1",
"webpack": "^5.75.0",
"webpack-cli": "^5.0.1",
"webpack-dev-server": "^4.11.1"
}
}
//index.ts 예시
import "./index.scss"; //scss 파일 import
import image from "./public/image.png"; //image파일 import
console.log(image);

빌드를 하고 나서 dist 폴더에 bundle.js 와 import한 png가 들어있는 것을 확인 할 수 있다.
참고
DevServer | webpack
webpack is a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser, yet it is also capable of transforming, bundling, or packaging just about any resource or asset.
webpack.js.org
[Webpack] file-loader와 url-loader 비교 차이점 정리
file-loader와 url-loader? 웹팩 설정 중 둘의 차이가 궁금해 알아보며 공부했던 내용을 정리해봅니다 file-loader The file-loader resolves import/require() on a file into a url and emits the file into the output directory. - 파일
joyful-development.tistory.com
tsx에 이미지 추가할 때 오류 해결 방법 [TypeScript]
js 에서 tsx 확장자 명을 바꾸고 나니 아래의 메시지와 함께 빨간불이 떳습니다.TS2307: Cannot find module '../assets/icons/flag-pink.png' or its corresponding type declarations.해결 방법으
velog.io
[Project] webpack resolve 설정으로 절대경로 및 확장자 관리하기
저는 프로젝트를 하면서 불만이 있었어요. 디렉토리가 점차 많아지니 경로 설정이 어렵구나! 확장자, 계속 일일이 설정해줘야 돼? 좋은 방법이 없나...?이를 고민한 결과, 리액트를 떠올려 봤을
velog.io
'Today I Learned' 카테고리의 다른 글
백엔드 s3 upload 구현 (0) | 2023.03.13 |
---|---|
로컬서버 file upload구현 (1) | 2023.03.10 |
코딩테스트 문제풀이 소수 찾기 (0) | 2023.01.24 |
코딩테스트 문제풀이 겹치는 선분의 길이 풀이 (0) | 2023.01.10 |
Heap 정리 (0) | 2022.12.29 |