이 기사는 Vildan Softic이 검토 한 동료입니다. Sitepoint 콘텐츠를 최선을 다해 Sitepoint의 동료 리뷰어 덕분에! Atom은 핵심 해킹 가능한 편집기의 현대적인 것입니다. 이것은 훌륭하지만 커피 스크립트에 유창하지 않은 개발자에게는 문서를 따르기가 어렵습니다. 원자의 생태계를 이해하면 혼란 스러울 수 있습니다. JavaScript에서 Atom 패키지를 작성하는 방법의 모든 측면을 살펴 보겠습니다. 키 테이크 아웃 는 바벨을 활용하여 JavaScript 코드를 전송하여 Atom의 크롬 기반 환경과의 호환성을 보장하여 미래의 적응성을 유지하면서 ES2015 기능의 사용을 향상시킵니다. `package.json` 파일을 사용하여 NPM 모듈과 같은 원자 패키지를 구조화하고, Atom의 생태계와 완벽하게 통합하기 위해 종속성 및 메타 데이터를 정의합니다. `active ()`,`deactivate ()`및`serialize ()`와 같은 필수 패키지 수명주기 방법을 구현하여 기본 JavaScript 파일에서 패키지의 사용주기를 통해 상태와 동작을 관리합니다. Atom의 직렬화 시스템을 사용하여 세션에서 패키지 상태를 유지하여 사용자 데이터 및 설정이 정확하게 보존되고 복원되도록합니다. 사용자 정의 뷰를 만들고 Atom의 API를 사용하여 구성 가능한 설정, 메뉴 및 키 맵을 추가하여 사용자 상호 작용을 향상시켜 패키지가 다목적 및 사용자 친화적입니다. 아톰 이해 Atom은 Github의 전자 프레임 워크로 작성된 Node.js 및 Chromium 기반 애플리케이션입니다. 즉, 기술적으로 데스크탑에서 실행되는 웹 응용 프로그램이라는 것을 의미합니다. Atom의 내부 기능은 작은 코어 패키지로 나뉩니다. 그들은 커뮤니티의 다른 패키지와 같은 방식으로 개발되었습니다. 그것들은 모두 CoffeeScript로 작성되었지만, 평범한 JavaScript로 작성하거나 Babel을 통해 트랜스 파일을 할 수 있습니다. . Babel을 사용하여 전체 ES2015 지원을 활성화합니다 바벨은 소스-소스 컴파일러입니다. ECMAScript 2015 (이전에 ES6으로 알려진) 코드를 ECMAScript 5 코드로 바꿉니다. 환경은 크롬이기 때문에 이미 지원되는 ES2015 기능이 많이 있습니다. 그러나 항상 구현되는 것을 항상 찾는 대신 Babel을 사용하여 코드를 전환하는 것이 좋습니다. 이후 릴리스에서 ES2015가 Chromium에서 더 잘 지원되는 경우 Babel을 다시 비활성화하고 코드베이스 (거의)를 그대로 유지할 수 있습니다. babel로 변환을 활성화하려면 각 파일에는 '사용 babel'이 필요합니다. ECMAScript 5의 Strict Mode와 유사한 시작의 진술. 이는 성명서를 생략함으로써 어떤 파일을 변환 해야하는지 결정할 수있는 기능을 제공합니다. package.json 는 원자 패키지를 NPM 모듈로 보는 데 도움이됩니다. Node.js에서 실행되는 도구와 API에 동일한 액세스 권한이 있습니다. 따라서 필요한 NPM 의존성을 추가 할 수 있습니다. Package.json도 프로젝트에 대한 모든 메타 데이터를 포함하여 필요합니다. 기본 파일은 다음과 같아야합니다. 중요한 키는 패키지의 기본 진입 점 (index.js/index.coffee 로의 기본값) 및 엔진 - - 패키지가 어떤 버전에 실행되는지에 대한 원자를 알려주는 주요 키가 기본입니다. "WordCount"패키지 문서 (섹션 package.json) . 에 문서화 된 옵션 키 세트도 있습니다. 패키지 소스 코드 모든 패키지 코드는 최상위 디렉토리 LIB/에 속합니다. 구조를 깨끗하게 유지하고 프로젝트를 더 쉽게 스캔 할 수 있으므로이 폴더에 입구 지점을 갖는 것이 좋습니다. { "name": "your-package", "main": "./lib/main", "version": "0.1.0", "description": "A short description of your package", "keywords": [ "awesome" ], "repository": "https://github.com//", "license": "MIT", "engines": { "atom": ">=1.0.0 <2.0.0" }, "dependencies": { } } . 주 파일은 패키지의 전체 수명주기를 유지하는 싱글 톤 객체 여야합니다. 패키지가 단일보기로만 구성 되더라도이 개체에서 모두 관리됩니다. Entry-Point에는 하나의 active () 메소드가 필요하지만 deactivate () 및 serialize (). 패키지를 활성화 activate () 함수는 유일한 필수 방법입니다. 여기에서 모든 모듈,보기 또는 도우미를 초기화하십시오. 패키지의 이전 직렬화 상태를 포함하는 객체가 전달됩니다. 패키지에서 일련의 아무것도하지 않으면 빈 객체가됩니다. 즉, 직렬화 할 내용에 대한 귀하와 귀하의 패키지 아키텍처에 전적으로 달려 있습니다. deactivating deactivate () 메소드는 선택 사항이지만 중요합니다. 창이 종료되거나 사용자가 설정에서 비활성화 할 때 Atom에 의해 호출됩니다. 사용자가 패키지를 비활성화하고 추가 이벤트/명령을 폐기하지 않으면 여전히 사용할 수 있습니다. Atom이 창을 종료 할 때는 문제가되지 않습니다. 그것은 사건과 명령을 중단 할 것입니다. 그러나 패키지가 파일을 보거나 다른 작업을 수행하는 경우 Deactivate ()에서 해제해야합니다. 이벤트 구독 패키지는 일반적으로 사용자 정의 명령 추가, 변경 듣기 또는 수정 된 파일과 같은 여러 이벤트를 구독합니다. 이것들을 compositedisposable ()의 인스턴스에 묶을 수 있으며,이 방법으로 모두 한 번에 배치 될 수 있습니다. . 모든 것들을 직렬화하십시오! 직렬화는 원자 패키지의 강력하지만 선택적인 기능입니다. 직렬화/사막화는 창이 이전 세션에서 셧다운, 새로 고침 또는 복원 될 때 발생합니다. 데이터를 직렬화 해야하는 구성 요소의 수와 수를 정의하는 것은 귀하에게 달려 있습니다. 중요한 것은 JSON을 반환한다는 것입니다. 당신이 견해가 있고 그것을 새로 고칠 수 있기를 원한다면, 직렬화 및 사막화와 호환되도록해야합니다. .이 매우 기본적인 구성 요소는 객체를 취하며 구성 요소의 내부 데이터로 사용됩니다. 그러면 구성 요소는 데이터와 함께 작업을 수행 할 수 있으며 Serialize () 메소드를 통해 상태를 직렬화 할 수 있습니다. 이 모든 것을 유용하게하려면이 구성 요소는 메인 싱글 톤에서 패키지에서 호출되고 직렬화되어야합니다. 직렬화하려는 모든 객체는 Serialize () 메소드가 필요합니다. "직렬화 가능한 객체"를 반환하고 등록 된 사막화 이름의 이름을 가진 사형화제 키를 반환해야합니다. Atom에 따르면,“일반적으로 클래스 자체의 이름입니다.” 또한 클래스는 정적 Deserialize () 메소드도 필요합니다. 이 메소드는 객체를 이전 상태에서 진정한 객체로 변환합니다. { "name": "your-package", "main": "./lib/main", "version": "0.1.0", "description": "A short description of your package", "keywords": [ "awesome" ], "repository": "https://github.com//", "license": "MIT", "engines": { "atom": ">=1.0.0 <2.0.0" }, "dependencies": { } } 이 모든 것을 가능하게하려면 Atom.deserializers.add (). PANES 및 VIECHS 창은 원자의 개별 창입니다. "항목"이라고하는 모든 열린 탭이 포함되어 있습니다. 이 창은 Atom.workspace 객체에 저장됩니다. atom.workspace.getActivePane ()을 사용하면 현재 활성 창을 요청합니다. 창 객체에는 DOM 요소가 포함되어 있지 않지만 Atom의 내부 구성 요소의 모든 인스턴스 (예 : 문자 메시지, GutterContainer, NotificationManager). 패키지에 대한 사용자 정의보기를 만드는 데이 창을 이해하는 것이 필수적입니다. views 또는 다른 사용자 정의 UI 요소를 추가하려는 다른 사용자 정의 UI 요소는 JavaScript로 작성해야합니다. Atom은 전적으로 웹 구성 요소로 빌드되지만 그렇게 할 필요는 없습니다. 사용자 정의 모달의 매우 기본적인 예는 다음과 같습니다. // lib/main.js 'use babel'; // This is your main singleton. // The whole state of your package will be stored and managed here. const YourPackage = { activate (state) { // Activates and restores the previous session of your package. }, deactivate () { // When the user or Atom itself kills a window, this method is called. }, serialize () { // To save the current package's state, this method should return // an object containing all required data. } }; export default YourPackage; atom.workspace.addmodalpanel () 메소드는 Atom의 작업 공간에 모달 요소를 추가합니다. 창에 사용자 정의보기를 추가하려면 (예 : 설정 페이지의 경우) 좀 더 많은 작업이 필요합니다. 패키지 구성 패키지 구성은 JSON 스키마에 설명해야합니다. 설정을 추가하려면 패키지 객체에는 데이터가 포함 된 구성 키가 필요합니다. 또는 구성을 config-schema.json 파일로 이동하여 가져올 수 있습니다. 이것은 구성을 분리하고 아키텍처를 구성합니다 이렇게하면 패키지 설정 페이지에서 구성이 자동으로 구성됩니다. 모든 지원되는 유형의 목록은 Atom의 API 문서 구성 페이지에서 찾을 수 있습니다. 다른 모든 패키지 구성과 함께 설정 객체는 Atom.config 객체에 저장됩니다. 를 얻고 설정합니다 get () 및 set () 메소드를 사용하여 구성 키를 얻고 설정할 수 있습니다. Atom의 일반 설정 또는 기타 패키지 설정을 얻을 수도 있습니다. 다른 패키지와 상호 작용하려면 서비스를 제공하고 소비해야합니다. { "name": "your-package", "main": "./lib/main", "version": "0.1.0", "description": "A short description of your package", "keywords": [ "awesome" ], "repository": "https://github.com//", "license": "MIT", "engines": { "atom": ">=1.0.0 <2.0.0" }, "dependencies": { } } 변경 듣기 변경 사항을 듣으려면 변경 사항 구성을 관찰하거나 OnDidChange ()라는 청취자가 키 경로로 가질 수 있습니다. 둘 다 당신이 .dispose ()를 구독 할 수있는 일회용을 반환합니다. 다시, compositedisposable의 인스턴스에 추가하면 한 번에 여러 이벤트를 처리 할 수 있습니다. 또는 개별적으로 처분하십시오 : 메뉴 및 키 맵으로 미세 조정 메뉴 및 키 맵은 원자 환경에서 사용자가 패키지의 기능에 액세스 할 수 있도록합니다. 인터페이스의 특정 명령과 연결되어 있습니다. 패키지를 전환 할 수 있거나보기를 열고 사용자 정의 작업이나 다른 작업을 수행하면 사용자가 사용할 수 있어야합니다. 메뉴 추가 메뉴 정의는 메뉴/ 최상위 디렉토리의 JSON 파일 또는 package.json의 메뉴 키에 저장 될 수 있습니다. 다음 예제는 패키지 메뉴 표시 줄과 편집기의 컨텍스트 메뉴에 명령을 추가합니다. 편집기 내부를 마우스 오른쪽 버튼으로 클릭하면 컨텍스트 메뉴가 나타납니다. keymaps 키 맵을 사용하면 패키지 명령의 바로 가기를 정의합니다. 그것들은 특정 스코프와 관련이 있으며, 여기서 범위는 원자 텍스트 편집자, Atom-Text-Editor : Not ([mini]) 또는 Atom-Workspace와 같은 CSS 선택기입니다. 셀렉터와 일치하는 요소가 초점을 맞추고 키 스트로크 패턴을 사용하면 사용자 정의 작업이 방출됩니다. // lib/main.js 'use babel'; // This is your main singleton. // The whole state of your package will be stored and managed here. const YourPackage = { activate (state) { // Activates and restores the previous session of your package. }, deactivate () { // When the user or Atom itself kills a window, this method is called. }, serialize () { // To save the current package's state, this method should return // an object containing all required data. } }; export default YourPackage; 입력 지점 에이 명령이 등록되어 있어야합니다 (atom.commands.add ()). 크롬 개발자 도구로 디버깅 Atom의 디버깅은 웹에서 디버깅과 크게 다르지 않습니다. VIEW> DEVELOPER> 개발자 도구를 전환하여 발전된 오류를 보거나 코드에서 로그를 보거나 Atom의 마크 업을 이해하기 위해 Chrome Developer Tools를 활성화 할 수 있습니다. Jasmine의 단위 테스트 Atom은 Jasmine 프레임 워크를 사용하여 테스트합니다. 테스트는 사양/ 최상위 디렉토리에 배치되며 파일은 -spec (예 : Fancy-component-spec.js)로 끝나야합니다. 테스트는 패키지를 실행하거나 게시 할 필요는 없지만 코드의 품질을 백업하고 새로운 기능을 추가 할 때 아무것도 깨지지 않도록하는 좋은 방법입니다. // lib/main.js import { CompositeDisposable } from 'atom'; const YourPackage = { subscriptions: null, activate (state) { // Assign a new instance of CompositeDisposable... this.subscriptions = new CompositeDisposable(); // ...and adding commands. this.subscriptions.add( atom.commands.add('atom-workspace', { 'your-package:toggle': this.togglePackage }) ); }, // When your package get's deactivated, all added // subscriptions will be disposed of at once. deactivate () { this.subscriptions.dispose(); }, togglePackage () { // Code to toggle the package state. } }; . 테스트를 실행하려면 Window : Run-Package-Specs 명령 또는보기> 개발자> Run 패키지 사양을 사용할 수 있습니다. Travis CI에서 패키지 사양을 실행하려면 Atom의 블로그에 설정 방법에 대한 간단한 게시물이 있습니다. 패키지 흐름 그것은 많은 입력이었습니다. 원자의 실제 흐름 또는 실행 순서는 대략 다음과 같습니다 (참고 : 테스트는 패키지 흐름의 일부가 아닙니다). Atom은 부팅하고 Package.json을 읽습니다 메뉴, 키 맵, 스타일 시트 및 기타 모든 구성이 적용됩니다 activationCommands가 정의되면 가 실행됩니다 메인 엔트리 포인트 (즉, activeate ())가 실행됩니다 패키지 매직 (예 : 사용자 입력에 반응, 뷰 생성, 파일 수정)이 작동합니다 당신은 패키지를 비활성화하거나 원자를 종료합니다 Atom은 패키지 상태를 직렬화합니다 결론 내 기사가 원자 패키지 개발에 대한 기본적인 이해를 얻는 데 도움이 되었기를 바랍니다. 불행히도 하나의 기사 만 다룰 수없는 많은 기능과 많은 주제가 여전히 있습니다. Atom Flight Manual을 살펴 보려면 다른 것이 무엇인지 확인하십시오. 어떤 패키지를 개발 하시겠습니까? 바닐라 JavaScript를 사용하여 Atom 패키지 작성에 대한 자주 묻는 질문 (FAQ) 바닐라 JavaScript 란 무엇이며 원자 패키지를 작성하는 데 중요한 이유는 무엇입니까? 바닐라 JavaScript는 추가 라이브러리 나 프레임 워크가없는 평범한 순수한 JavaScript를 나타냅니다. 가볍고 효율적이며 사용자 정의 가능한 코드를 허용하기 때문에 Atom 패키지를 작성하는 데 중요합니다. Vanilla JavaScript를 사용하여 개발자는 더 빠르고 안전하며 디버깅 및 유지 관리가 쉬운 패키지를 만들 수 있습니다. 또한 패키지가 타사 라이브러리에 의존하지 않도록하여보다 신뢰할 수 있고 강력하게 만듭니다. 바닐라 JavaScript를 사용하여 Atom 패키지 작성을 시작하는 방법은 무엇입니까? 쓰기를 시작하려면 어떻게해야합니까? 바닐라 JavaScript를 사용하는 Atom 패키지는 먼저 개발 환경을 설정해야합니다. 여기에는 Node.js 및 Atom 설치가 포함됩니다. 이 설치되면 Atom 패키지 생성기를 사용하여 새 패키지를 만들 수 있습니다. 그런 다음 바닐라 JavaScript를 사용하여 패키지 작성을 시작할 수 있습니다. Atom 패키지 가이드 라인을 따라 패키지가 Atom 편집기와 호환되는지 확인하십시오. 바닐라 JavaScript에서 모듈을 가져오고 내보내는 방법은 무엇입니까? 바닐라 JavaScript에서는 가져 오기를 사용할 수 있습니다. 코드에 모듈을 포함시키기위한 내보내기 명세서. 가져 오기 명령문을 사용하면 다른 모듈의 함수, 객체 또는 값을 가져올 수 있으며 내보내기 문은 모듈의 특정 부분을 다른 모듈에 사용할 수 있도록 할 수 있습니다. 기본 예는 다음과 같습니다. // module.js 에서 함수 내보내기 함수 myFunction () { // 함수 코드 } // 가져 오기 다른 모듈의 함수 import {myfunction}에서 './module.js'; 바닐라 JavaScript에서 코드를 모듈화하는 이점은 무엇입니까? 바닐라 JavaScript의 코드 모듈화에는 몇 가지 이점이 있습니다. 코드를보다 체계적으로 구성하고 이해하기 쉽고 유지 관리합니다. 또한 응용 프로그램의 다른 부분에서 동일한 모듈을 가져오고 사용할 수 있으므로 코드 재사용을 촉진합니다. 또한 각 모듈은 자체 종속성을 지정할 수 있으므로 종속성 관리에 도움이됩니다. 바닐라 JavaScript로 작성된 Atom 패키지를 어떻게 디버그합니까? Atom은 내장 된 개발자 도구 패널을 제공합니다. 패키지를 디버깅하는 데 사용할 수 있습니다. 개발자> 토글 개발자 도구를보기 위해이 패널을 열 수 있습니다. 여기에서 코드를 검사하고 중단 점을 설정하고 변수 및 네트워크 활동을 모니터링 할 수 있습니다. 또한 코드의 Console.log () 문을 사용하여 디버깅 목적으로 콘솔에 값을 출력 할 수 있습니다. Atom 패키지의 다른 버전과 Atom 패키지를 어떻게 호환 할 수 있습니까? Atom 패키지가 다른 버전의 Atom과 호환되도록하려면 Atom API 지침을 따르고 더 이상 사용되지 않은 API를 사용하지 않아야합니다. 또한 다양한 버전의 Atom에서 패키지를 테스트하여 호환성 문제를 식별하고 수정해야합니다. 또한 Package의 Package.json 파일에 필요한 최소 Atom 버전을 지정할 수 있습니다. Atom 패키지를 어떻게 게시합니까? 일단 Atom 패키지를 작성하고 테스트 한 후에는 여러분 APM Publish 명령을 사용하여 Atom 패키지 저장소에 게시 할 수 있습니다. 게시하기 전에 APM 버전 명령을 사용하여 새 버전의 패키지를 만들어야합니다. 또한 패키지 용 Github 저장소를 작성하고 코드를 푸시해야합니다. 바닐라 JavaScript로 작성된 내 원자 패키지의 성능을 향상시키는 방법은 무엇입니까? 바닐라 JavaScript로 작성된 Atom 패키지에서 ES6 기능을 사용할 수 있습니까? 예, 사용할 수 있습니다. Atom 패키지의 ES6 기능. Atom의 기본 Node.js 런타임은 LET 및 Const 선언, 화살표 기능, 템플릿 리터럴 등을 포함한 대부분의 ES6 기능을 지원합니다. 그러나 ES6 기능을 사용하여 이전 버전의 원자와 호환성 문제를 일으키지 않도록해야합니다. 바닐라 javaScript로 작성된 내 원자 패키지의 오류를 어떻게 처리합니까? Try-Catch 블록을 사용하여 Atom 패키지의 오류를 처리 할 수 있습니다. 이를 통해 코드 실행 중에 발생할 수있는 예외를 잡고 처리 할 수 있습니다. Atom.notifications API를 사용하여 사용자에게 오류 메시지를 표시 할 수도 있습니다. 이 API는 오류 알림을 포함하여 다양한 유형의 알림을 표시하는 방법을 제공합니다.