vue-d3-network 모듈을 사용해서 그래프를 만들려고 하는데
노드 Icon을 지정하려면 svg 파일을 불러와야했다.
import icon from '~.svg';
이렇게 svg를 불러온 뒤 속성값에 넣어줬는데 변화가 없었다.
차이점을 찾으려고 예제 소스를 보니 아래와 같이 svg 파일을 불러오고 있었다.
import nodeIcon from '../assets/node.svg?raw'
svg?raw는 뭘까?
똑같이 해봤는데 당연히 변화가 없었다. console에 찍어보면 그저 path만 나올 뿐,,
vite-svg-loader 이런 모듈을 찾았는데
import iconRaw from './my-icon.svg?raw'
위 예시와 같이 뒤에 ?raw를 붙이면 파일의 raw 데이터를 불러오도록 되어있었다.
Raw
SVGs can be imported as strings using the ?raw suffix:import iconRaw from './my-icon.svg?raw' // '<?xml version="1.0"?>...'
그런데 vite 용 모듈이라서.. 다른 비슷한 모듈이 없는지 찾아봤음.
// vue.config.js
chainWebpack: config => {
const svgRule = config.module.rule('svg');
// 기존 file-loader 설정 load
const fileLoaderOptions = svgRule.use('file-loader').get('options');
svgRule.uses.clear();
svgRule
.oneOf('raw')
.resourceQuery(/raw/) // ?raw 에 대해
.use('raw-loader') // raw-loader를 적용하겠다.
.loader('raw-loader')
.end()
.end() // 그리고 그외는 file-loader를 적용하겠다.
.oneOf('external')
.use('file-loader')
.loader('file-loader')
.options(fileLoaderOptions); // 기존 option 다시 넣어주기.
}