Monaco 편집기를 사용하여 JSON 속성에서 JavaScript 강조 표시
그만큼 모나코 편집자 Visual Studio Code의 핵심으로 널리 알려진 강력한 코드 편집기입니다. 구문 강조, 토큰화, 파일 내 다양한 언어 삽입 등 광범위한 사용자 정의 기능을 제공합니다. 그러나 개발자가 JavaScript를 포함하는 것과 같은 고급 설정이 필요한 경우가 있습니다. JSON 속성.
JSON 속성 내에 있는 JavaScript 코드를 마치 독립 실행형인 것처럼 표시하려고 할 때 일반적인 문제가 발생합니다. 자바스크립트 블록. 이는 JSON이 데이터 저장소 역할을 할 뿐만 아니라 실행 가능한 코드 조각을 전달하는 프로젝트에 필수적입니다. "평가" 재산.
이 기사에서는 JSON 필드에 포함된 JavaScript를 인식하고 올바르게 표시하도록 Monaco Editor를 구성하는 데 필요한 단계를 설명합니다. 기존 튜토리얼과 제안에도 불구하고 원하는 구문 강조를 달성하려면 보다 맞춤화된 접근 방식이 필요합니다. 여기서는 이에 대해 살펴보겠습니다.
권리를 사용하여 토큰화 패턴 구성은 Monaco Editor가 의도한 대로 작동하도록 보장합니다. 제공된 예제 코드에는 JavaScript 코드가 포함된 "eval" 필드가 있는 JSON 구조가 포함되어 있습니다. 솔루션을 안내하고 Copilot의 제안을 사용하여 이 기능을 구현하려고 할 때 직면한 몇 가지 함정을 강조하겠습니다.
명령 | 사용예 |
---|---|
monaco.languages.register() | 그러면 Monaco Editor에 새로운 사용자 정의 언어가 등록되어 기본 동작을 확장하거나 수정할 수 있습니다. 이는 JSON 속성에 JavaScript를 포함할 때 중요합니다. |
monaco.languages.setMonarchTokensProvider() | 언어에 대한 사용자 정의 구문 강조 규칙을 정의합니다. 이는 편집기가 JSON 및 포함된 JavaScript 필드를 토큰화하는 방법을 지정하는 데 사용됩니다. |
nextEmbedded | 모나코에게 현재 언어 내에 다른 언어를 포함하도록 지시하는 특정 Monarch 토큰화 속성입니다. JSON 내부에서 JavaScript를 처리하는 데 사용됩니다. |
monaco.editor.create() | 지정된 DOM 요소 내에 새 Monaco Editor 인스턴스를 만듭니다. 원하는 언어 구성 및 코드 내용으로 편집기를 초기화합니다. |
require(['vs/editor/editor.main']) | 기본 Monaco 편집기 모듈을 비동기식으로 로드하여 사용하기 전에 모든 편집기 기능이 올바르게 초기화되었는지 확인합니다. |
getModel().getValue() | Monaco Editor의 현재 콘텐츠를 검색합니다. 단위 테스트에서 이는 "eval" 필드에 예상 JavaScript 코드가 포함되어 있는지 확인하는 데 사용됩니다. |
token: 'source.js' | 이는 포함된 JavaScript 코드에 대한 토큰 유형을 지정하여 코드가 JSON 구조 내에서 강조 표시되는 JavaScript 구문을 받도록 합니다. |
test() | 단위 테스트를 정의하는 데 사용되는 Jest 테스트 기능입니다. 이러한 맥락에서 편집기는 JSON 속성 내에 포함된 JavaScript 코드를 올바르게 식별하고 강조 표시합니다. |
console.error() | 이 명령은 Monaco가 초기화에 실패할 경우 콘솔에 오류를 기록하므로 개발자는 설정 중에 문제를 디버깅할 수 있습니다. |
Monaco Editor를 사용하여 JSON에 JavaScript를 포함하는 방법
이전에 제공된 스크립트는 구성 방법을 보여줍니다. 모나코 편집자 JSON 속성, 특히 "eval" 필드 아래에 포함된 JavaScript를 인식하고 올바르게 표시합니다. 이 설정을 통해 편집기는 포함된 JavaScript를 마치 독립형 JavaScript 파일의 일부인 것처럼 구문 분석할 수 있습니다. 이를 달성하는 열쇠는 다음을 사용하여 사용자 정의 토크나이저를 정의하는 것입니다. 군주 이를 통해 편집기는 JavaScript 섹션을 식별하고 JSON 구조 내에서 적절한 구문 강조 표시를 적용할 수 있습니다.
예제에서 가장 중요한 명령 중 하나는 다음과 같습니다. 모나코.언어.등록. 이 명령은 새로운 언어 구성을 등록하여 Monaco의 기본 동작을 효과적으로 확장합니다. 이를 사용하여 "jsonWithJS"라는 사용자 정의 언어를 도입하여 향상된 JSON 설정을 표준 설정과 차별화합니다. 우리는 또한 고용합니다 setMonarchTokensProvider, 새로 등록된 언어에 대한 토큰화 규칙을 선언할 수 있습니다. 이는 "eval" 속성 내에 포함된 JavaScript를 처리하는 방법을 편집기에 알려주는 데 중요합니다.
그만큼 다음임베디드 속성은 단일 토큰 내에서 JSON에서 JavaScript로 전환하는 데 중요한 역할을 합니다. "eval" 필드 내부의 콘텐츠가 JSON 파일 내에 있더라도 JavaScript로 처리되도록 보장합니다. 이러한 원활한 전환을 통해 "eval" 필드 내부의 코드가 JavaScript로 표시되며 더 나은 가독성을 위해 Monaco의 구문 강조 기능을 사용하는 개발자에게 도움이 됩니다. 추가적으로, monaco.editor.create 메서드는 Monaco Editor를 초기화하고 지정된 HTML 컨테이너 내에서 편집기 인스턴스를 렌더링하는 데 사용됩니다.
Jest를 사용한 단위 테스트는 JSON 속성 내부의 JavaScript가 올바르게 인식되고 강조 표시되는지 확인합니다. 이를 통해 우리 솔루션의 신뢰성이 보장되고 다양한 환경에서 작동합니다. 우리는 또한 다음을 사용하여 오류 처리를 구현합니다. 콘솔.오류 편집기 초기화 중 문제를 기록합니다. 이 모듈식 설계를 통해 개발자는 코드를 쉽게 재사용하고 언어 포함이 필요한 다른 시나리오에 맞게 확장할 수 있습니다. 이러한 구성을 통해 이제 개발자는 실행 가능한 JavaScript 코드가 포함된 JSON 파일로 작업할 때 더욱 동적이고 읽기 쉬운 환경의 이점을 누릴 수 있습니다.
Monaco Editor를 사용하여 JSON 속성에 JavaScript 포함
Monaco Editor 내 JSON 속성에 포함된 JavaScript를 사용하여 구문 강조를 위한 토크나이저 사용자 정의에 중점을 둡니다.
// Frontend Script: Monaco Editor configuration to embed JavaScript within JSON
// This solution initializes Monaco with a custom language definition.
require(['vs/editor/editor.main'], function () {
monaco.languages.register({ id: 'jsonWithJS' });
monaco.languages.setMonarchTokensProvider('jsonWithJS', {
tokenizer: {
root: [
[/"eval"\s*:\s*"(.*)"/, { token: 'source.js', nextEmbedded: 'javascript' }],
[/[{}[\],]/, 'delimiter'],
[/\b\d+\b/, 'number'],
[/"/, { token: 'string', bracket: '@open', next: '@string' }],
],
}
});
monaco.editor.create(document.getElementById('container'), {
value: '{"eval":"Item.val = Attr.val"}',
language: 'jsonWithJS'
});
});
JSON 및 JavaScript 임베딩과 함께 Monaco Editor를 사용하는 대체 접근 방식
향상된 오류 처리 및 모듈식 설정을 갖춘 토큰화를 사용하는 솔루션
// Frontend: Modular Monaco configuration with error handling
function setupMonacoEditor() {
require(['vs/editor/editor.main'], function () {
try {
monaco.languages.register({ id: 'jsonWithEmbeddedJS' });
monaco.languages.setMonarchTokensProvider('jsonWithEmbeddedJS', {
tokenizer: {
root: [[/"eval"\s*:\s*"(.*?)"/, { token: 'source.js', nextEmbedded: 'javascript' }]]
}
});
const editor = monaco.editor.create(document.getElementById('editor'), {
value: '{"eval":"console.log(Attr.val);"}',
language: 'jsonWithEmbeddedJS'
});
} catch (error) {
console.error('Failed to initialize Monaco:', error);
}
});
}
setupMonacoEditor();
Monaco Editor 구성에 대한 단위 테스트
JSON 속성 내에 포함된 JavaScript 토큰화를 확인하기 위한 Jest 기반 단위 테스트
// Unit Test: Jest test for Monaco Editor's JSON with embedded JavaScript
test('Monaco Editor recognizes JavaScript in eval property', () => {
const mockEditor = {
getModel: () => ({ getValue: () => '{"eval":"console.log(Item.val);"}' })
};
const value = mockEditor.getModel().getValue();
expect(value).toContain('console.log(Item.val);');
expect(value).toMatch(/"eval":\s*".*?"/);
});
내장된 JavaScript를 사용하여 JSON에서 구문 강조 표시 향상
이전에 논의되지 않은 한 가지 측면은 내장된 JavaScript가 포함된 대규모 JSON 파일을 처리할 때 편집기 성능을 최적화하는 것이 중요하다는 것입니다. Monaco Editor는 여러 언어를 처리할 수 있지만 서로 언어를 포함하면 복잡성이 추가됩니다. 신중하게 구성하지 않으면 성능이 저하될 수 있습니다. 특히 다음과 같은 경우에는 더욱 그렇습니다. 토큰화 프로세스가 비효율적이게 됩니다. 이를 방지하려면 개발자는 자신의 모나크 토크나이저 잘 정의되어 있으며 최적화된 정규식을 사용하여 처리 시간을 최소화합니다.
또 다른 중요한 고려 사항은 자동 완성 기능을 갖춘 편집기의 유연성입니다. 개발자는 JSON 키와 JavaScript 코드 모두에 대해 자동 완성을 활성화하여 JSON-with-JavaScript 편집기를 향상시킬 수 있습니다. 이를 위해, 완성항목 제공자 모나코의 API는 사용자가 입력할 때 동적으로 제안을 제공하는 데 사용할 수 있습니다. 이 기능은 평가 코드 블록이 포함된 복잡한 JSON 구조로 작업할 때 생산성을 크게 향상시킬 수 있습니다.
보안은 또 다른 필수 측면입니다. JSON에 JavaScript를 포함하면 다음에 대한 우려가 발생할 수 있습니다. 코드 삽입 특히 사용자 생성 콘텐츠가 허용되는 환경에서는 위험합니다. JSON 콘텐츠를 편집기에서 렌더링하기 전에 검증하고 정리하는 것이 좋습니다. 또한 개발자는 잠재적인 보안 취약성을 방지하기 위해 샌드박스를 사용하거나 내장된 JavaScript 실행을 제한하는 것을 고려해야 합니다. 이러한 관행을 결합하면 JavaScript를 JSON에 통합하는 것이 원활하고 안전하며 개발 및 안전 표준을 충족할 수 있습니다.
Monaco Editor를 사용하여 JSON에 JavaScript 삽입에 대해 자주 묻는 질문
- Monaco Editor를 사용하여 JSON에 JavaScript를 포함할 때 주요 과제는 무엇입니까?
- 주요 과제는 다음을 사용하여 포함된 JavaScript를 올바르게 식별하고 강조 표시하도록 토크나이저를 구성하는 것입니다. nextEmbedded.
- 동일한 Monaco Editor에서 JSON과 JavaScript 모두에 대해 자동 완성을 활성화하려면 어떻게 해야 합니까?
- 당신은 사용할 수 있습니다 monaco.languages.registerCompletionItemProvider JSON 키와 JavaScript 구문 모두에 대한 제안을 동적으로 제공합니다.
- 대용량 JSON 파일을 사용할 때 성능 문제를 방지하려면 어떻게 해야 합니까?
- 정규식 최적화 setMonarchTokensProvider 대용량 파일의 처리 오버헤드를 줄이는 데 도움이 됩니다.
- 에디터 초기화시 오류를 처리할 수 있는 방법이 있나요?
- 예, 초기화 코드를 try...catch 블록을 사용하면 오류를 기록할 수 있습니다. console.error 설정이 실패하면.
- 보안을 위해 포함된 JavaScript의 실행을 제한할 수 있나요?
- 예, 입력을 삭제하고 샌드박싱 기술을 적용하여 JSON 파일 내에서 악성 코드가 실행되는 것을 방지할 수 있습니다.
내장된 JavaScript와 함께 JSON용 Monaco 사용에 대한 최종 생각
Monaco Editor는 JavaScript 코드를 삽입하고 적절한 구문 강조 표시를 적용하여 JSON 파일을 향상시키는 강력한 방법을 제공합니다. 토큰화 구성이 까다로울 수 있지만 군주 토큰화를 통해 개발자는 이를 원활하게 처리하고 혼합 언어 파일 내에서 읽을 수 있는 코드를 보장할 수 있습니다.
이 설정으로 생산성이 향상되지만 성능 및 보안 고려 사항을 신중하게 처리하는 것이 중요합니다. 토크나이저를 최적화하고 사용자 생성 콘텐츠를 삭제하면 안정성을 유지하고 악성 코드 삽입을 방지하는 데 도움이 됩니다. 올바른 설정을 통해 Monaco는 복잡한 JSON 구조 작업을 위한 유연하고 안전한 환경을 제공할 수 있습니다.
임베디드 JavaScript로 Monaco를 구현하기 위한 소스 및 참조
- 다국어 지원을 위한 Monaco Editor 사용에 대해 자세히 설명합니다. 다음에서 공식 문서를 확인하세요. 모나코 편집자 문서 .
- 고급 구문 강조를 위해 모나코에서 Monarch 토큰화 구성에 대한 참조 자료입니다. 자세한 내용은 다음에서 확인하세요. Monarch 구문 문서 .
- 모나코에서 사용자 정의 언어 정의 및 임베딩을 구현하는 방법을 설명합니다. 자세히 알아보기 VS Code 언어 확장 가이드 .
- 임베디드 코드 실행 검증을 위한 Jest 테스트 가이드입니다. 방문하다 Jest 공식 문서 자세한 내용은