목표를 정리하십시오 : 라이브러리 구축을 시작하기 전에 해결하고자하는 특정 문제를 명확히하고 집중하고 유용성을 보장합니다.
사용자 중심 API 설계 : 최종 사용자 센터를 사용하여 라이브러리를 디자인하여 간단하고 사용하기 쉽도록 사용자 채택 및 만족도를 향상시킵니다.
유연성 및 사용자 정의 :
구성, 공개 방법 및 다양한 사용자 요구에 맞는 이벤트 처리를 통해 사용자 정의 옵션을 제공합니다. 테스트 및 문서 :
Mocha 또는 Jasmine과 같은 프레임 워크를 사용하여 철저한 테스트를 수행하고 이해하고 사용하는 데 도움이되는 포괄적 인 문서가 제공됩니다.
모듈 로더 호환성 : 는 UMD (Universal Module Definition) 또는 유사한 메소드를 사용하여 호환성을 극대화하여 라이브러리가 다양한 모듈 로더를 지원하는지 확인하십시오.
버전화 및 릴리스 : 시맨틱 버전을 업데이트하고 NPM 또는 Bower와 같은 패키지 관리자에게 라이브러리를 더 많은 잠재 고객에게 도달하십시오.
이 기사는 Adrian Sandu, Vildan Softic 및 Dan Prince가 동료 검토했습니다. itepoint 컨텐츠를 최대한 활용 한 모든 Sitepoint Peer Reviewers에게 감사합니다! 우리는 종종 라이브러리를 사용합니다. 라이브러리는 개발자가 프로젝트에서 사용할 수있는 포장 코드이며, 의심 할 여지없이 워크로드를 저장하고 중복 휠을 피합니다. 재사용 가능한 패키지 (오픈 소스 또는 폐쇄 소스 모두)를 사용하는 것이 과거 프로젝트에서 수동으로 동일한 기능을 재구성하거나 복사하는 것보다 낫습니다. 그러나 패키지 코드 외에도 라이브러리는 정확히 무엇입니까? 일부 예외를 제외하고 라이브러리는 항상 단일 파일 또는 단일 폴더에있는 여러 파일이어야합니다. 코드는 별도로 유지 관리해야하며 프로젝트에 구현 될 때 동일하게 유지됩니다. 라이브러리를 사용하면 프로젝트 별 구성 및/또는 동작을 설정할 수 있어야합니다. USB 포트를 통한 통신 만 허용하는 USB 장치로 생각하십시오. 마우스 및 키보드와 같은 일부 장치에서는 장치가 제공 한 인터페이스를 통해 구성 할 수 있습니다.
이 기사에서는 라이브러리가 어떻게 구축되었는지 설명하겠습니다. 다루는 대부분의 주제는 다른 언어에 적합하지만이 게시물은 JavaScript 라이브러리 구축에 중점을 둡니다.
왜 자신의 JavaScript 라이브러리를 구축합니까?
우선, 라이브러리는 기존 코드를 매우 편리하게 만듭니다. 오래된 프로젝트를 파고 일부 파일을 복사 할 필요는 없으며 도서관을 가져 오십시오. 이것은 또한 응용 프로그램을 파편화하여 응용 프로그램 코드를 더 작고 유지 관리하기 쉽게 만듭니다.
Christ Church Library (Source) 추상화와 같이 특정 목표를 달성하고 재사용 할 수있는 모든 코드는 도서관에 포장 될 수있는 후보입니다. 흥미로운 예는 jQuery입니다. JQuery의 API는 단순화 된 DOM API 이상의 것이지만, 몇 년 전 크로스 브라우저 DOM 운영이 매우 어려웠을 때 많은 의미가있었습니다.
오픈 소스 프로젝트가 대중화되고 점점 더 많은 개발자가 사용하면 사람들이 질문을 제출하거나 코드 기반에 기여하여 프로젝트에 참여하고 도울 가능성이 큽니다. 어느 쪽이든, 그것은 도서관과 이에 의존하는 모든 프로젝트에 도움이됩니다. 인기 오픈 소스 프로젝트는 큰 기회를 가져올 수 있습니다. 회사는 직업의 질에 깊은 인상을 받고 직업을 제공 할 수 있습니다. 회사가 프로젝트를 응용 프로그램에 통합하는 데 도움을 요청할 것입니다. 결국, 아무도 당신보다 당신의 도서관을 더 잘 아는 사람은 없습니다.
많은 사람들에게, 그것은 단지 취미 일뿐입니다 - 코드 작성 과정을 즐기고, 다른 사람들을 돕고, 과정에서 배우고 성장하는 것입니다. 한계를 밀고 새로운 것을 시도 할 수 있습니다.
범위와 대상
첫 번째 코드 줄을 작성하기 전에 라이브러리의 목적이 무엇인지 분명해야합니다. 목표를 설정해야합니다. 그들과 함께, 당신은 당신이 당신의 도서관에서 해결하고 싶은 문제에 집중할 수 있습니다. 도서관은 원래의 질문보다 사용하기 쉽고 기억해야합니다. API가 더 간단할수록 사용자가 라이브러리 사용을보다 쉽게 배울 수 있습니다. 인용 유닉스 철학 :
는 한 가지만하고 잘 수행
스스로에게 물어보십시오 : 도서관은 어떤 문제를 해결합니까? 어떻게 해결할 건가요? 모든 것을 직접 쓰겠습니까, 아니면 다른 사람의 도서관을 사용할 수 있습니까?
Github와 같은 많은 서비스는 모든 버전에 대한 개요와 각 버전에 대한 다운로드 링크를 제공합니다.
공개 저장소에 게시
npm
많은 프로그래밍 언어에는 패키지 관리자가 제공되거나 타사 패키지 관리자가 사용될 수 있습니다. 이를 통해 이러한 언어를 위해 특별히 라이브러리를 소개 할 수 있습니다. 예를 들어, PHP의 작곡가와 Ruby 's Rubygems.
기본적으로 NPM 패키지는 공개적으로 게시됩니다. 괜찮아요! 개인 패키지를 게시하거나 개인 레지스트리를 설정하거나 게시하지 않아도됩니다.
패키지를 게시하려면 프로젝트에는 package.json 파일이 필요합니다. 이 작업을 수동으로 수행하거나 대화식 마법사를 사용할 수 있습니다. 마법사를 시작하려면 다음을 입력하십시오
버전 속성은 GIT 태그와 일치해야합니다. 또한 readme.md 파일이 있는지 확인하십시오. Github와 마찬가지로 NPM은 패키지를 렌더링하는 페이지로 사용합니다.
후에는 다음 명령을 입력하여 패키지를 게시 할 수 있습니다.
그게 다야! NPM 패키지를 게시했습니다.
bower
몇 년 전, Bower라는 다른 패키지 관리자가 나타났습니다. 그러나이 패키지 관리자는 특정 언어가 아니라 특정 플랫폼 웹 용으로 설계되었습니다. 모든 주요 프론트 엔드 리소스를 찾을 수 있습니다. 라이브러리가 브라우저와 호환되는 경우 Bower에 패키지를 게시하는 것이 합리적입니다.
Bower에 익숙하지 않으면 초보자 가이드도 있습니다.
<code>// 以空的UserAgent字符串开始
var userAgent = new UserAgent;
// 创建并添加第一个产品:EvilCorpBrowser/1.2 (X11; Linux; en-us)
var application = new UserAgent.Product('EvilCorpBrowser', '1.2');
application.setComment('X11', 'Linux', 'en-us');
userAgent.addProduct(application);
// 创建并添加第二个产品:Blink/20420101
var engine = new UserAgent.Product('Blink', '20420101');
userAgent.addProduct(engine);
// EvilCorpBrowser/1.2 (X11; Linux; en-us) Blink/20420101
userAgent.toString();
// 对引擎产品进行更多更改
engine.setComment('Hello World');
// EvilCorpBrowser/1.2 (X11; Linux; en-us) Blink/20420101 (Hello World)
userAgent.toString();
</code>
NPM과 마찬가지로 개인 저장소를 설정할 수도 있습니다. 마법사에서 완전히 게시하는 것을 방지 할 수도 있습니다.
흥미롭게도 지난 1 년 또는 2 년 동안 많은 사람들이 프론트 엔드 리소스를 위해 NPM으로 전환하는 것 같습니다. NPM 패키지는 주로 JavaScript이지만 많은 프론트 엔드 패키지도 NPM에서 릴리스됩니다. 어느 쪽이든, Bower는 여전히 매우 인기가 있으므로 패키지를 Bower에 게시하는 것이 좋습니다.
Bower가 실제로 NPM 모듈이며 처음에는 영감을 받았다고 언급 했습니까? 명령 는 매우 유사합니다. bower.json 파일을 생성하려면 다음을 입력하십시오
npm init와 마찬가지로 설명은 자명합니다. 마지막으로, 패키지를 게시하십시오 :
그게 IT입니다. 모든 사람이 노드 프로젝트 및/또는 웹에 사용할 수 있도록 라이브러리를 인터넷에 게시했습니다!
결론
핵심 제품은 라이브러리입니다. 문제가 해결되고 사용하기 쉽고 안정적이며 팀이나 많은 개발자를 매우 행복하게 만들 것입니다.
<code>// 以空的UserAgent字符串开始
var userAgent = new UserAgent;
// 创建并添加第一个产品:EvilCorpBrowser/1.2 (X11; Linux; en-us)
var application = new UserAgent.Product('EvilCorpBrowser', '1.2');
application.setComment('X11', 'Linux', 'en-us');
userAgent.addProduct(application);
// 创建并添加第二个产品:Blink/20420101
var engine = new UserAgent.Product('Blink', '20420101');
userAgent.addProduct(engine);
// EvilCorpBrowser/1.2 (X11; Linux; en-us) Blink/20420101
userAgent.toString();
// 对引擎产品进行更多更改
engine.setComment('Hello World');
// EvilCorpBrowser/1.2 (X11; Linux; en-us) Blink/20420101 (Hello World)
userAgent.toString();
</code>
내가 언급 한 많은 작업은 테스트 실행, 태그 작성, Package.json의 버전 업데이트 및 NPM 및 Bower에 패키지를 다시 게시하는 등 자동화하기 쉽습니다. 이곳에서 지속적인 통합 영역에 들어가고 Travis CI 또는 Jenkins와 같은 도구를 사용합니다. 나는 Tim Evko의 기사에 대해 앞서 언급했으며 이것에 대해서도 언급했다.
도서관을 제작하고 게시 했습니까? 아래 의견 섹션에서 공유하십시오!
자주 묻는 질문 (FAQ)은 자신의 JavaScript 라이브러리를 설계하고 구축하는 데있어
내 자신의 JavaScript 라이브러리를 만드는 것의 이점은 무엇입니까?
<code>// 在初始化时配置
var userAgent = new UserAgent({
commentSeparator: ';'
});
// 使用公共方法进行运行时配置
userAgent.setOption('commentSeparator', '-');
// 使用公共属性进行运行时配置
userAgent.commentSeparator = '-';
</code>
자신만의 JavaScript 라이브러리를 만드는 것은 많은 이점이 있습니다. 먼저 여러 프로젝트에서 코드를 재사용하여 장기적으로 시간과 노력을 절약 할 수 있습니다. 둘째,보다 체계적이고 읽기 쉬운 방식으로 코드를 구성하는 데 도움이 될 수 있습니다. 이것은 대규모 프로젝트를 수행하거나 다른 개발자와 함께 일할 때 특히 유용합니다. 마지막으로, 자신의 라이브러리를 만드는 것은 JavaScript 및 소프트웨어 개발 원칙에 대한 이해를 심화시키는 데 도움이되는 훌륭한 학습 경험이 될 수 있습니다.
JavaScript 라이브러리 생성을 어떻게 시작합니까?
JavaScript 라이브러리를 만드는 첫 번째 단계는 그 목적을 정의하는 것입니다. 라이브러리가 어떤 기능을 제공하기를 원하십니까? 도서관이 원하는 일을 명확하게 이해하면 코드 작성을 시작할 수 있습니다. 여기에는 일반적으로 필요한 기능을 제공하는 일련의 기능을 정의하는 것이 포함됩니다. 그런 다음 이러한 기능은 다른 개발자가 사용할 수있는 공개 API를 통해 노출됩니다.
JavaScript는 브라우저 및 Node.js 환경에서 실행되며 JavaScript 엔진을 사용하여 코드를 구문 분석하고 실행합니다. 1) 구문 분석 단계에서 초록 구문 트리 (AST)를 생성합니다. 2) 컴파일 단계에서 AST를 바이트 코드 또는 기계 코드로 변환합니다. 3) 실행 단계에서 컴파일 된 코드를 실행하십시오.
Python 및 JavaScript의 미래 추세에는 다음이 포함됩니다. 1. Python은 과학 컴퓨팅 분야에서의 위치를 통합하고 AI, 2. JavaScript는 웹 기술의 개발을 촉진하고, 3. 교차 플랫폼 개발이 핫한 주제가되고 4. 성능 최적화가 중점을 둘 것입니다. 둘 다 해당 분야에서 응용 프로그램 시나리오를 계속 확장하고 성능이 더 많은 혁신을 일으킬 것입니다.
개발 환경에서 Python과 JavaScript의 선택이 모두 중요합니다. 1) Python의 개발 환경에는 Pycharm, Jupyternotebook 및 Anaconda가 포함되어 있으며 데이터 과학 및 빠른 프로토 타이핑에 적합합니다. 2) JavaScript의 개발 환경에는 Node.js, VScode 및 Webpack이 포함되어 있으며 프론트 엔드 및 백엔드 개발에 적합합니다. 프로젝트 요구에 따라 올바른 도구를 선택하면 개발 효율성과 프로젝트 성공률이 향상 될 수 있습니다.
예, JavaScript의 엔진 코어는 C로 작성되었습니다. 1) C 언어는 효율적인 성능과 기본 제어를 제공하며, 이는 JavaScript 엔진 개발에 적합합니다. 2) V8 엔진을 예를 들어, 핵심은 C로 작성되며 C의 효율성 및 객체 지향적 특성을 결합하여 C로 작성됩니다.
JavaScript는 웹 페이지의 상호 작용과 역학을 향상시키기 때문에 현대 웹 사이트의 핵심입니다. 1) 페이지를 새로 고치지 않고 콘텐츠를 변경할 수 있습니다. 2) Domapi를 통해 웹 페이지 조작, 3) 애니메이션 및 드래그 앤 드롭과 같은 복잡한 대화식 효과를 지원합니다. 4) 성능 및 모범 사례를 최적화하여 사용자 경험을 향상시킵니다.
C 및 JavaScript는 WebAssembly를 통한 상호 운용성을 달성합니다. 1) C 코드는 WebAssembly 모듈로 컴파일되어 컴퓨팅 전력을 향상시키기 위해 JavaScript 환경에 도입됩니다. 2) 게임 개발에서 C는 물리 엔진 및 그래픽 렌더링을 처리하며 JavaScript는 게임 로직 및 사용자 인터페이스를 담당합니다.
JavaScript는 웹 사이트, 모바일 응용 프로그램, 데스크탑 응용 프로그램 및 서버 측 프로그래밍에서 널리 사용됩니다. 1) 웹 사이트 개발에서 JavaScript는 HTML 및 CSS와 함께 DOM을 운영하여 동적 효과를 달성하고 jQuery 및 React와 같은 프레임 워크를 지원합니다. 2) 반응 및 이온 성을 통해 JavaScript는 크로스 플랫폼 모바일 애플리케이션을 개발하는 데 사용됩니다. 3) 전자 프레임 워크를 사용하면 JavaScript가 데스크탑 애플리케이션을 구축 할 수 있습니다. 4) node.js는 JavaScript가 서버 측에서 실행되도록하고 동시 요청이 높은 높은 요청을 지원합니다.
Python은 데이터 과학 및 자동화에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 데이터 처리 및 모델링을 위해 Numpy 및 Pandas와 같은 라이브러리를 사용하여 데이터 과학 및 기계 학습에서 잘 수행됩니다. 2. 파이썬은 간결하고 자동화 및 스크립팅이 효율적입니다. 3. JavaScript는 프론트 엔드 개발에 없어서는 안될 것이며 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축하는 데 사용됩니다. 4. JavaScript는 Node.js를 통해 백엔드 개발에 역할을하며 전체 스택 개발을 지원합니다.
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.