
리액트 개발을 하면서 굉장히 편리하게 사용했던 크롬 확장 프로그램 LocatorJS...
아쉽게도 해당 익스텐션은 Angular에서 지원되지 않는다.
Angular 개발을 시작한지도 벌써 두 달, LocatorJS가 있으면 DX가 크게 향상될 것 같다는 생각이 들었다.
우선 LocatorJS에서 Angular를 지원할 예정이 있을까?

이슈가 올라온지도 약 3년이 흘렀다.. 지원을 기대하기는 쉽지 않아보였다.
그러면 직접 한 번 만들어보자. 잘 만들기만 하면...
크롬 익스텐션 개발을 해본 적은 없지만, 대부분의 크롬 익스텐션이 JS로 개발되어 있는 것을 보면 나도 도전해볼만하다고 생각했다. (해보니 진짜 별 거 없었다)
우선 필요한 기능부터 정리해보자면
React, Preact, Vue, Svelte는 이미 LocatorJS에서 지원 중이기 때문에 나는 Angular-Only-Target으로 진행한다. (한국에선 우리 팀말고 아무도 안쓰겟군.)
개발 환경이 Angular로 구성되어 있는지 아닌지 알기 위한 방법은 여러가지가 있다.
window 객체에 등록된 Angular 관련 요소들(Zone, ng 등) 존재 여부ng prefix의 존재 여부
위 요소들을 확인하여 Angular Project가 존재하는지 여부를 판단하여 지원 여부를 알려줄 수 있다.

LocatorJS와 같이 command 키를 누르고 마우스를 올렸을 때 해당 요소를 개발자 도구의 Inspector와 같이 HTML 요소를 콕 집어야한다. 이 기능도 정말 여러가지 구현 방법이 있다.
const component = window.ng.getComponent(element);
Angular의 컴포넌트 선택자 생성 방식(ex.app-user-card -> UserCardComponent)으로 알아내는 것인데, 선택자를 바꾸는 예외 케이스가 굉장히 많으므로 해당 방법은 적절치 않다.
const debugElement = window.ng.probe(element);
const component = debugElement.componentInstance;
const componentName = component.constructor?.name
const globalComponent = findNearestAngularComponent(element);
말 그대로 다 돌며 찾는 것이다. 이건 최악의 성능을 지니므로 최후의 수단이다..
위 방법들 중 1번과 3번이 그나마 쓸만한 것 같은데, 아직 무엇이 더 적절할 지는 모르겠다. 2편에서 계속 ...
이게 좀 어려운 부분이다. 컴포넌트 이름 등 Angular의 컴포넌트 정보를 알아냈다 한들 이 컴포넌트가 정확히 어떤 폴더에 어떤 파일명으로 저장되어 있을지 알아내기가 쉽지 않은 것 같다.
현재 여러 방법을 통해 구현해보는 중인데 정확도가 높지 않다. stable한 방법을 찾으면 따로 글로 정리해보려 한다.
해당 기능은 chrome에서 제공하는 API를 다음과 사용하면 된다.
자세한 레퍼런스는 여기를 참고
chrome.runtime.sendMessage({
action: 'openFile',
componentInfo: componentInfo
}, (response) => {
if (response && response.success) {
showNotification('파일이 열렸습니다!', 'success');
} else {
showNotification('파일 열기에 실패했습니다', 'error');
}
});
크롬 익스텐션에 등록하기 위해 manifest.json 파일을 루트 디렉토리에 작성해주면 된다.
https://developer.chrome.com/docs/extensions/reference/manifest?hl=ko
위 링크에서 필요한 내용을 참고하여 manifest.json 파일을 작성한다.
chrome://extensions/
위 사이트에 접속하여 개발자 모드를 켜고, 프로젝트 디렉토리를 등록하면 직접 내가 만든 익스텐션을 사용해볼 수 있다.
아직 개발중이어서 잘 동작하지는 않지만... 우선 기반 구축은 완료했다.
배포할 수 있을 정도의 퀄리티로 만들 수 있을지는 모르지만, DX 향상을 위해 자발적으로 무언가를 만들어보는 경험이 처음이라 도키도키하다. 잘 만들고 대박 나서 개발은 취미로 할 수 있기를. . .
[개발 테스트 화면] 