Vite에서 dist/assets/ 폴더의 모든 .js 파일을 한 개의 파일로 묶기 위해 다른 접근 방법을 시도해 보겠습니다. 아래의 방법을 따라해 보세요:
- npm install concat-cli 명령을 사용하여 concat-cli 패키지를 설치합니다.
- package.json 파일을 열고, "scripts" 섹션에 다음을 추가합니다:
jsonCopy code
"scripts": { "build": "vite build && concat-cli -f ./dist/assets/*.js -o ./dist/assets/all.js" }
- 터미널에서 npm run build 명령을 실행합니다. 이 명령은 vite build를 실행하고, 그 후에 concat-cli를 사용하여 dist/assets/ 폴더의 모든 .js 파일을 dist/assets/all.js 파일로 결합합니다.
이 방법은 먼저 Vite를 통해 프로젝트를 빌드한 다음, concat-cli를 사용하여 .js 파일을 하나로 결합하는 방식입니다. 결과적으로 dist/assets/all.js 파일이 생성되며, 해당 파일은 dist/assets/ 폴더의 모든 .js 파일을 포함하게 됩니다.
vite.config.js
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { nodePolyfills } from 'vite-plugin-node-polyfills'
// https://vitejs.dev/config/
export default defineConfig({
// server: {
// hmr: false
// },
worker: {
format: 'es',
},
plugins: [
vue(),
nodePolyfills({
// To exclude specific polyfills, add them to this list.
exclude: [
'buffer', // Excludes the polyfill for `fs` and `node:fs`.
],
// Whether to polyfill `node:` protocol imports.
protocolImports: true,
}),
],
css: {
preprocessorOptions: {
scss: {
additionalData: `
@import "@/style/__test.scss";
`
},
},
} ,
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
}
})
--- 안됨 ---
rollupOptions: {
output: {
/*
src/tr 안에 있는 *.js 파일들을 group-all~~~.js 로 하나로 해준다.
그런데 해당 개별파일들도 생성된다. (참조도 하고 있다. 지우면 안된다.)
manualChunks(id) {
if (id.includes('/src/tr')) {
return 'group-all';
}
},
*/
/*
manualChunks: {
'Wtr': [
'./src/tr/W1910A01.js',
'./src/tr/W6112S01.js',
'./src/tr/W6115S01.js',
'./src/tr/WretimFA.js',
'./src/tr/WretimFB.js',
'./src/tr/WretimRegiDel.js',
'./src/tr/WretimRegiDelId.js',
],
},
*/
}
}
원인 찾음 -> 안됨 vite 는 무조건 js 파일을 만듬
프로젝트 폴더
src
components
js
store
style
tr
+header
base.js
realTime.js
realTimeId.js
realTimeRes.js
W1910A01.js
W6112S01.js
위와같이 tr 디렉토리 밑에 W1910~ W6112~ 등 tr 포맷형태의 js 파일이 있다.
위와 같은 상태에서 build 시 dist/assets/W1910A01.js W6112S01.js 각각 파일이 생성된다.
파일생성되지 않게 하기 위해서 아래와 같이 변경한다.
tr
+header
base.js
realTime.js
realTimeId.js
realTimeRes.js
+main
W1910A01.js
W6112S01.js
main 폴더를 만들고 그 하위에 W19~~ tr 내용을 넣는다 .
위와같이 하면 프로그램 작동 안함
원인 찾음
trData.js 원본소스
if(header.hasOwnProperty('routing')) { // 조회
const trName = header.routing.value.trim();
tr = await import(`../../tr/main/${trNameT}.js`);
} else { // 실시간
tr = await import(`../../tr/main/${component}.js`);
}
resolve(tr.default);
위와같이 동적으로 tr import 한다. vite 에서는 동적으로 import 하는것은 build 시에서 dist/assets/ 에 모든걸 생성한다.
하지만 배포시에 최소한의 파일만 배포해야 되기때문에 동적으로 import 하는걸 지양한다.
trData.js 수정된 소스
/**
* 비지니스 로직 별로 다르게 차이 날수 있는 부분들을 처리하기 위한 모듈
*/
//사용 되는 헤더를 모두 포함
import { dd } from '@/js/dd';
import base from '@/tr/header/base.js';
import realTime from '@/tr/header/realTime.js';
import realTimeId from '@/tr/header/realTimeId.js';
import realTimeRes from '@/tr/header/realTimeRes.js';
//-- 동적이 아닌 정적으로 사용하기 위해 추가
import W1910A01 from '@/tr/main/W1910A01';
import W6115S01 from '@/tr/main/W6115S01';
import W6112S01 from '@/tr/main/W6112S01';
import WretimRegiDelId from '@/tr/main/WretimRegiDelId';
import WretimRegiDel from '@/tr/main/WretimRegiDel';
import WretimFA from '@/tr/main/WretimFA';
import WretimFB from '@/tr/main/WretimFB';
const trObj = {
W1910A01: W1910A01,
W6115S01: W6115S01,
W6112S01: W6112S01,
WretimRegiDelId: WretimRegiDelId,
WretimRegiDel: WretimRegiDel,
WretimFA: WretimFA,
WretimFB: WretimFB,
}
//-- //동적이 아닌 정적으로 사용하기 위해 추가
const headerObj = {
base: base,
realTime: realTime,
realTimeId: realTimeId,
realTimeRes: realTimeRes,
};
const trData={
regPattern:'{{.*}}', //정보입력 파싱 패턴
info:function(string){
if(string.indexOf('{{') >= 0) { //(0D00 조회)
/* 정보입력부분의 파싱 */
const regExp=new RegExp(this.regPattern);
const temp = string.match(regExp)[0].replace('{{','{').replace('}}','}');
const infoJson=JSON.parse(temp);
/* 헤더선택 */
const header = headerObj[infoJson.h];
/* 반환데이터 구성 */
const returnJson={
header:header,
component:infoJson.c,
method:infoJson.m,
}
return returnJson;
} else { //실시간 (0C00 실시간)
/* 반환데이터 구성 */
const returnJson = {
header: '',
component: '',
method: '',
}
const gubun = string.substring(6, 7).toUpperCase(); // 실시간 구분
const gubunType = string.substring(7, 9).toUpperCase(); // 실시간 구분(FA FB E0:긴급공지사항 MD:맞춤환율도달 E1:강제종료)
let realType;
if(gubun == 'I') { // 실시간 체결(49)
} else if(gubun == 'F') { // 맞춤환율도달(46)
} else if(gubun == 'H') { // 실시간환율(FA/FB) 47(G) 48(H)
switch(gubunType) {
case 'FA' : realType = 'WretimFA'; break;
case 'FB' : realType = 'WretimFB'; break;
/*
case 'O1' : realType = 'WretimRtsOrder'; break;
case 'E0' : realType = 'WretimExrtNotice'; break; // 긴급공지사항
case 'MD' : realType = 'WretimExrtAlm'; break; // 맞춤환율도달
case 'E1' : realType = 'WretimLogout'; break; // 강제종료
*/
}
returnJson.header = realTimeRes;
returnJson.component = realType;
returnJson.method = 'recive';
} else { // 알람
}
return returnJson;
}
},
/**
* 해더 데이터의 정보로 tr포맷을 반환함
* @param {*} header
* @returns
*/
getTrFormat: function(header, component){
return new Promise(async function(resolve,reject){
let tr;
if(header.hasOwnProperty('routing')) { // 조회
const trNameT = header.routing.value.trim();
/**
* 2023.07.11 아래와 같이 동적으로 import 해도 되긴된다.
* 그런데 build 시에는 W1910~ 모든 tr 을 넣어줘야되기때문에
* 상단에서 import 한후에 사용하기로 한다.
*/
//tr = await import(`../../tr/main/${trNameT}.js`);
tr = trObj[trNameT];
} else { // 실시간
tr = trObj[component];;
//tr = await import(`../../tr/main/${component}.js`);
}
//resolve(tr.default);
resolve(tr);
})
}
}
export default trData;
그래도 안되면
App.vue 에 모두 꽃아줘야함
<retimFA>
....
....
import retimFA from '@/components/n_WretimFA.vue';
'프로그래밍 > Js' 카테고리의 다른 글
[es6] builder pattern (빌더패턴) 샘플 (0) | 2023.08.02 |
---|---|
vite vue3 오프라인에서 작업시 OS 플랫폼 별로 build 되는 현상 (0) | 2023.07.13 |
[vite] 번들러 vite 사용시 터미널에서 build 방법 (0) | 2023.07.07 |
vite 번들러 사용시 preview 이전값을 계속 보여주는 이유 (0) | 2023.07.06 |
[javascript] 변수에 변수값 넣고 싶을때 (동적변수, 가변변수) (0) | 2023.07.06 |