๋ผ์ฐํธ ์ง์ฐ ๋ก๋ฉ โ
๋ฒ๋ค๋ฌ๋ก ์ฑ์ ๋น๋ํ ๋, ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ด ๊ฝค ์ปค์ง ์ ์์ผ๋ฉฐ, ์ด๋ ํ์ด์ง ๋ก๋ ์๊ฐ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค. ๊ฐ ๋ผ์ฐํธ์ ์ปดํฌ๋ํธ๋ฅผ ๋ณ๋์ ์ฒญํฌ๋ก ๋ถํ ํ๊ณ , ํด๋น ๋ผ์ฐํธ๊ฐ ๋ฐฉ๋ฌธ๋ ๋๋ง ๋ก๋ํ๋ค๋ฉด ๋ ํจ์จ์ ์ผ ๊ฒ์ ๋๋ค.
Vue Router๋ ๋์ import๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ฏ๋ก, ์ ์ import๋ฅผ ๋์ import๋ก ๋์ฒดํ ์ ์์ต๋๋ค:
// ๋ค์์ ๋์ฒด
// import UserDetails from './views/UserDetails'
// ์๋์ ๊ฐ์ด ์ฌ์ฉ
const UserDetails = () => import('./views/UserDetails.vue')
const router = createRouter({
// ...
routes: [
{ path: '/users/:id', component: UserDetails }
// ๋๋ ๋ผ์ฐํธ ์ ์์์ ์ง์ ์ฌ์ฉ
{ path: '/users/:id', component: () => import('./views/UserDetails.vue') },
],
})
component
(๋ฐ components
) ์ต์
์ ์ปดํฌ๋ํธ์ Promise๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ๋ฐ์ ์ ์์ผ๋ฉฐ, Vue Router๋ ํด๋น ํ์ด์ง์ ์ฒ์ ์ง์
ํ ๋๋ง ์ด๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์ดํ์๋ ์บ์๋ ๋ฒ์ ์ ์ฌ์ฉํฉ๋๋ค. ์ฆ, Promise๋ฅผ ๋ฐํํ๋ ํ ๋ ๋ณต์กํ ํจ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค:
const UserDetails = () =>
Promise.resolve({
/* ์ปดํฌ๋ํธ ์ ์ */
})
์ผ๋ฐ์ ์ผ๋ก, ๋ชจ๋ ๋ผ์ฐํธ์ ๋์ import๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ฐธ๊ณ
๋ผ์ฐํธ์๋ ๋น๋๊ธฐ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ง ๋ง์ธ์. ๋น๋๊ธฐ ์ปดํฌ๋ํธ๋ ๋ผ์ฐํธ ์ปดํฌ๋ํธ ๋ด๋ถ์์๋ ์ฌ์ฉํ ์ ์์ง๋ง, ๋ผ์ฐํธ ์ปดํฌ๋ํธ ์์ฒด๋ ๋์ import๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค.
webpack๊ณผ ๊ฐ์ ๋ฒ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ ๋, ์๋์ผ๋ก ์ฝ๋ ๋ถํ ์ ์ด์ ์ ๋๋ฆด ์ ์์ต๋๋ค.
Babel์ ์ฌ์ฉํ ๊ฒฝ์ฐ, Babel์ด ํด๋น ๋ฌธ๋ฒ์ ์ฌ๋ฐ๋ฅด๊ฒ ํ์ฑํ ์ ์๋๋ก syntax-dynamic-import ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
๋์ผ ์ฒญํฌ๋ก ์ปดํฌ๋ํธ ๊ทธ๋ฃนํ โ
webpack์์ โ
๋๋๋ก ๋์ผํ ๋ผ์ฐํธ ์๋์ ์ค์ฒฉ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๋ฅผ ๋์ผํ ๋น๋๊ธฐ ์ฒญํฌ๋ก ๊ทธ๋ฃนํํ๊ณ ์ถ์ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ํด์๋ ์ด๋ฆ์ด ์ง์ ๋ ์ฒญํฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฉฐ, ํน๋ณํ ์ฃผ์ ๋ฌธ๋ฒ์ ํตํด ์ฒญํฌ ์ด๋ฆ์ ์ง์ ํ ์ ์์ต๋๋ค(webpack > 2.4 ํ์):
const UserDetails = () =>
import(/* webpackChunkName: "group-user" */ './UserDetails.vue')
const UserDashboard = () =>
import(/* webpackChunkName: "group-user" */ './UserDashboard.vue')
const UserProfileEdit = () =>
import(/* webpackChunkName: "group-user" */ './UserProfileEdit.vue')
webpack์ ๋์ผํ ์ฒญํฌ ์ด๋ฆ์ ๊ฐ์ง ๋ชจ๋ ๋น๋๊ธฐ ๋ชจ๋์ ๋์ผํ ๋น๋๊ธฐ ์ฒญํฌ๋ก ๊ทธ๋ฃนํํฉ๋๋ค.
Vite์์ โ
Vite์์๋ rollupOptions
์๋์์ ์ฒญํฌ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค:
// vite.config.js
export default defineConfig({
build: {
rollupOptions: {
// https://rollupjs.org/guide/en/#outputmanualchunks
output: {
manualChunks: {
'group-user': [
'./src/UserDetails',
'./src/UserDashboard',
'./src/UserProfileEdit',
],
},
},
},
},
})