PHPStorm Plugin 개발 | #6. trouble-shooting

보람·2022년 7월 3일
0

IDE-PLUGIN-만들기

목록 보기
7/7
post-thumbnail

.env 파일이 수정되지 않는 문제

env swithing 버튼을 클릭하면 해당 환경에 대한 환경파일로 스위칭되도록 처리를 하였다.
그런데 .env 파일에서 스위칭을 하면 바로 적용되지 않는 문제가 발생하였다.🥸

어쩌면 좋지.. 하다가 jetbrains 커뮤니티에 질문을 올렸다!

  • 실제 질문 링크 : (질문)
    커뮤니티에 글을 올리니까 jetbrains 직원으로 보이는 분께서 답글을 달아주셨다.

몇번 답변과 질문이 오고가고서 알게된 것은 IDE 에서는 우리가 흔히 알고 있는 파일이라는 개념을 사용하면 원하는 결과를 얻지 못할 수 있다는 것이었다!

가상파일

IDE 자체에서 파일 작업이 일어날 때 가상파일이라는 개념을 사용한다.
파일 생성이라던가 수정이 일어날 때 가상파일을 생성하거나 수정을 하기 때문에 빠른 로딩이 가능하다는 것이었다.
자바에서 제공하는 File 개념을 사용하여 create, copy 같은 것들을 사용하면 처리가 되기는 해도 로딩하는데 시간이 걸려서 동작되지 않는 것처럼 보인 것이었다!

실제로 File, copy를 했을 때 어느정도 시간이 흐르면 .env 파일이 변경이 되는 것을 확인 할 수 있었다.
하지만.. 우리는 몇초라도 걸리면 느리다고 생각하기에,, 커뮤니티에서 알려준대로 VirtualFile로 파일 작업을 하도록 처리하였다.

가상파일 로딩

원리는 간단했는데 .env 파일을 생성 or 수정하는 시점에 .env 파일을 리로딩 하게끔 하면 되는 것이다.
그런데 자료를 찾아서 적용을 하는게 어려웠다.
모든 파일 리로딩과 특정 파일만을 리로딩하는 방법 두가지를 찾을 수 있었다.

markDirtyAndRefresh

해당 명령어는 .env 파일 뿐만이 아니라 해당 프로젝트에 존재하는 모든 파일을 리로딩하도록 해주는 명령어였다.

해당 명령어 사용이 너무 간단하고 코드도 짧아서 이 명령어를 쓰면 안되냐고 커뮤니티에 물어봤을 때(답정너쥬?)
써도 되지만 특정 파일만을 리로딩하도록 처리하는 것이 더 좋다는 답변을 받았다.ㄸㄹㄹ

refresh

refresh 라는 명령어를 찾았다! 해당 명령어는 특정 파일만을 리로딩해준다!
해당 명령어를 사용하여 작업을 하였고 .env 파일이 로딩되지 않는 문제를 해결 할 수 있었다 : )

그렇게 수정한 코드는 아래 깃허브 링크에서 확인 할 수 있다.

참고 자료

  • setBinaryContent(envToTypeFile?.contentsToByteArray()) : (링크)
  • LocalFileSystem.getInstance().refreshAndFindFileByPath : (링크)
  • app.runWriteAction : (링크)
profile
백엔드 개발자

0개의 댓글