진스
파일 전역으로 관리하기/절대 경로 만들기 본문
728x90
출처
1. vue-cli를 통해 프로젝트를 만들어 줍니다.
1
2
3
4
5
6
|
$ npm i -g @vue/cli
$ vue create <project-name>
//저는 기본 default 를 선택했습니다
cd <project-name>
yarn serve
//정상적으로 프로젝트 실행됨
|
cs |
2. src 밖에서 webpack 설정 파일을 작성합니다.
- Vue-cli 2에서는 webpack.config.js 라는 파일이 루트에 있었으나 3부터는 해당 파일이 없기 때문에 루트 디렉토리에 vue.config.js 라는 파일을 만들고 아래 코드를 넣어줍니다.
- src 밖 에서 만들어야합니다.
1
2
3
4
5
6
7
8
9
10
|
//vue.config.js
module.exports = {
configureWebpack: {
// Set up all the aliases.
resolve: {
alias: require("./aliases.config").webpack
}
}
};
//참고 : https://webpack.js.org/configuration/resolve/
|
cs |
3. src 밖에서 aliases에 대한 설정 파일을 작성합니다.
- 간단히 utils에 대한 단축키만 작성하겠습니다. (확장 가능하게 만들었습니다)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
const path = require("path");
const aliases = {
"@": "src",
"@utils": "src/utils"
//'@api': 'src/api',
//'@store': 'src/store', 확장 가능
};
module.exports = {
webpack: {}
};
for (const alias in aliases) {
//위 aliases 변수를 루프 돌면서 모두 적용
const aliasTo = aliases[alias];
module.exports.webpack[alias] = resolveSrc(aliasTo);
}
function resolveSrc(_path) {
//path.resolve로 플랫폼 별 구분 기호를 구분 기호로 사용하여 지정된 모든 경로를 결합한 다음 결과 경로를 정규화합니다.
return path.resolve(__dirname, _path);
}
|
cs |
이렇게 되면 src 내부에서 아래와 같이 alias에서 만든 단축어가 발동됩니다.
1
|
import utils from "@utils";
|
cs |
이제 정말 하려 했던 전역에 utils가 호출되게 해봅시다. 4. src/main.js 에 다음과 같이 붙여 넣어 줍니다.
4. src/main.js 에 다음과 같이 붙여 넣어 줍니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
//src/main.js
import Vue from "vue";
import App from "./App.vue";
import utils from "@utils";
//원하시는대로 확장하세요
//import api from "@api";
//import store from "@store";
//아래의 코드로 Vue전역에 this.$utils로 호출이 가능하게 됩니다.
Vue.prototype.$utils = utils;
//원하시는대로 확장하세요
//Vue.prototype.$api = api;
//Vue.prototype.$store = store;
new Vue({
render: h => h(App)
}).$mount("#app");
|
cs |
5. srs/utils/index.js ( utils 디렉토리를 만들어 줍니다. )
- 아래 코드는 utils에서 만들어지는 모든 코드를 불러오는 역할을 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
//src/utils/index.js
const functions = {};
const requireFunction = require.context(
".", // 현재 폴더 검색
false, // 하위 폴더 확인 안함
/^((?!index).)*\.js$/ // index.js를 제외한 모든 js 파일
);
requireFunction.keys().forEach(filename => {
const functionDefinition = requireFunction(filename);
const functionPath = filename
.replace(/^\.\//, "") // 시작부분 "./" 제거
.replace(/\.\w+$/, ""); // 확장자 제거
if (typeof functionDefinition.default === "function") {
functions[functionPath] = functionDefinition.default;
} else if (typeof functionDefinition.default === "object") {
functions[functionPath] = { ...functionDefinition.default };
}
});
export default { ...functions };
|
cs |
6. utils의 test 함수를 만듭니다.
1
2
3
4
|
//src/utils/contextTest.js
export default () => {
return "전역 함수 리턴 됬습니다";
};
|
cs |
7. 모든 세팅을 마쳤습니다. 이제 호출을 해봅시다
- 위의 contextTest의 값을 원래대로 가져오려면 import contextTest from '../utils/contextTest.js'로 호출해야 하지만 alias와 vue.prototype에 작업을 했기 때문에 전역에서 바로 호출이 가능하게 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<template>
<div class="hello">
<!--'전역 함수 리턴 됬습니다'--!>
<span>{{contextText}}</span>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
computed :{
contextText : function(){
//전역으로 호출되는 모습
return this.$utils.contextTest()
}
},
}
</script>
|
cs |
8. 마무리
- 위 코드들을 따라 하시면 api, store 등등 여러 곳에서 자주 쓰이는 모듈들을 손쉽게 불러올 수 있습니다.
- 웹팩에 대해 좀 더 알아보는 시간이 되었던것 같습니다.
728x90
'Vue' 카테고리의 다른 글
@focus, @blur 등 다양한 이벤트 사용방법 (0) | 2021.04.30 |
---|---|
이벤트 수식어 (0) | 2021.04.30 |
computed와 watch (0) | 2021.04.29 |
vue에서 audio 사용하기 (1) | 2021.04.29 |
무한스크롤과 라이프사이클 훅 (0) | 2021.04.29 |
Comments