"lib"와 "vendor"폴더의 차이점은 무엇입니까?


103

소스 폴더 계층 구조와 관련하여 내용을 이해하기 쉬운 src, doc또는 test폴더 와 같은 몇 가지 일반적인 기능이 항상 있습니다.

그러나 큰 프로젝트에는 폴더 libvendor폴더 가 모두 있음을 깨달았 지만 이름은“ libraries외부에서 타사”를 포함하는 것으로 암시 되었 듯이 항상 동일하다고 생각했습니다 vendors. 그러나 동일한 프로젝트에서 둘 다 보는 것은 차이 있음을 의미 합니다.

실제로는 일반적인 방법 이지만 파일 시스템 이나 Google 또는 Filesystem Hierarchy Standard 와 같은 소스에서 정보를 찾을 수 없습니다 .


Symfony에 대한보다 자세한 예는 다음과 같습니다 . 일단 프로젝트를 생성하면 프로젝트 lib루트에 폴더 가 생깁니다 . 이 폴더에는 다음과 같은 구조가 있습니다.

lib
+--filter
+--form
+--…
+--vendor
    +--simpletest
    +--symfony

symfony폴더에는 모든 Symfony의 코어가 포함되어 있습니다.


3
@YannisRizos 나는 그것이 그들의 출처에 없다는 것을 안다. 그러나 프로젝트 작업을 시작하고 모듈을 생성하면에 lib/vendor따라 다른 디렉토리가 생깁니다 vendor. 그리고 그들은 유일한 사람아닙니다 . "누구든지 모든 디렉토리 구조를 선택할 수 있습니다" 예, 감사합니다. 그러나 누구나 원하는대로 코딩 할 수 있습니다. src“woudzigouga”라고 부르고 싶다면 할 수 있습니다. 나는 할 수 있는지 묻지 않고 진지하고 잘 알려진 다른 사람들이 좋은 습관처럼 보이는 것을하는 이유를 묻습니다.
MattiSG

2
lib핵심 라이브러리 (절대적으로 필수 라이브러리 또는 프레임 워크와 동일한 저자로 빌드 된 라이브러리)를 vendor보유하고 타사 라이브러리 를 보유하고 있는 명백한 것 외에는 다른 확실한 구별이 없다고 생각합니다. 이러한 구별은 여러 가지 이유로 다소 중요하며 일반적인 관행으로 의미가 있습니다.
yannis

1
btw, 질문 자체에 주석의 설명을 추가 할 수 있습니까?
yannis

@YannisRizos 어떤 설명이 필요합니까? 내 질문을 증명하는 Google 코드 검색이 완전히 허위가 아니십니까? 구별이 중요한“다양한 이유”를 자세히 설명하고 포함 된 일부 타사가 다른 회사보다 더 중요 할 수있는 방법을 설명 할 수 있다면 실제로 도움이 될 것입니다. 관리자는 무능하고 배치 포함 코드입니다.
MattiSG

1
/ lib /에서 물건을 만질 수 있고, / vendor /에서 물건을 만질 수 없습니다
Timo Huovinen

답변:


64

lib또는 libraries디렉토리를 볼 때 다음을 생각합니다.

  • 플러그인, 모듈 등이 아닌 라이브러리
  • 해당되는 경우 절차 대신 OOP (예 : PHP)

vendor디렉토리를 볼 때 다음을 생각합니다.

  • 라이브러리, 플러그인, 모듈, 구성 요소 등 라이브러리뿐만 아니라 타사에서 제공하는 모든 것.
  • 그리고 아이콘 세트처럼 코드가 아닌 것들.

내가 볼 때 libvendor디렉토리, 나는 몇 가지 구분의 생각 :

  1. lib도서관 만 보유하고 있으며 vendor실제로는
  2. lib라이브러리를 넣어야하는 vendor곳 , 써드 파티 (원본 저자의 코드 포함)를 넣어야하는 곳,
  3. lib프로젝트의 원저자에 의한 라이브러리가있는 곳이고 (저는 아닌 경우), vendor원작자는 제 3 자에게 무언가를 넣는 곳입니다.
  4. lib프로젝트의 나머지 부분과 동일한 라이센스로 라이센스 가 있다고 가정 할 수 있습니다 .

위 중 하나에 해당하는 것은 다른 폴더를 갖기에 충분한 이유입니다. AFAIK 일반적으로 인정되는 관행은 없습니다. 일부 커뮤니티에는 커뮤니티 전반에 공통적 인 관행이 있지만 그 정도입니다.


특정 Symfony 예제와 관련하여 Symfony는 프레임 워크이며 개발자가 Symfony 응용 프로그램에서 프레임 워크의 핵심 라이브러리는 벤더 코드입니다 (예 : 응용 프로그램의 원래 작성자가 아닌 타사에서 제공). (당신).


2
"코드가 아닌 스터프"는 IMHO 에 data있거나 resources(또는 그 라인을 따라 더 정확한 것 img) IMHO입니다. 또한 Symfony 예제에는 vendor실제로 모든 Symfony 코어가 포함되어 있으므로 "원저 저자"명칭을 얻지 않는 한 2와 3에 맞지 않는다고 생각합니다.
MattiSG

1
@MattiSG 아, 죄송합니다, 네 점 모두에 맞아야한다는 말은 아닙니다. 딱 하나만. 그리고 "코드가 아닌 스터프"는 resources또는 assets디렉토리 에 있어야 하지만 프로젝트에 따라 디렉토리에서 의미가있을 수 있습니다 vendor(정말 선호합니다 assets).
yannis

4
더 나은 단수 또는 복수는 무엇입니까? liblibsvendorvendors?
Quang

4
@Quang 내가 본 가장 인기있는 프로젝트는 단수형을 사용하지만 어느 것이 더 좋은지 전혀 모른다.
yannis

@ YannisRizos : 절차 대신 OOP를 생각하게 만드는 이유는 무엇입니까?
매트 오브라이언

21

@WayneM의 답변을 일반화하지만 과감하게 편집하지는 않습니다.

따라서이 구조는 응용 프로그램 프레임 워크 (Rails 및 Symfony)에서 관찰 될 수 있습니다.

프레임 워크를 사용하여 가져온 다른 수준의 거리 를 추가하면서 응용 프로그램 개발자에게는 lib/ src구조를 그대로 유지하는 방법입니다 . 폴더에는 실제로 프레임 워크의 라이브러리 가 포함되어 있으며 응용 프로그램에 포함 된 라이브러리와 소스에 대한 폴더는 그대로 둡니다. 파일.vendorlibsrc

lib프레임 워크가 없으면 응용 프로그램은 쓸모 없지만 응용 프로그램 개발자가 건드리지 않기 때문에 "더 먼" 것입니다. 프레임 워크 공급 업체의 라이브러리 입니다.


10

Symfony와 같은 경우 lib응용 프로그램 코드 (예 : 개발자가 작성)이며 vendor타사 코드입니다. lib가 src폴더 와 같은 것으로 생각 하고 벤더는 lib 라고 생각하십시오 . html 템플릿을 실제 클래스와 분리하기 때문에 일반적으로 PHP에서 해당 스타일을 볼 수 있습니다.


2

로부터 레일 자산 파이프 라인 가이드 :

  • app/assets 사용자 정의 이미지, JavaScript 파일 또는 스타일 시트와 같이 애플리케이션이 소유 한 자산을위한 것입니다.

  • lib/assets 응용 프로그램의 범위 또는 응용 프로그램간에 공유되는 라이브러리에 실제로 맞지 않는 자신의 라이브러리 코드 용입니다.

  • vendor/assets JavaScript 플러그인 및 CSS 프레임 워크 코드와 같은 외부 엔티티가 소유 한 자산을위한 것입니다.

나는 이것이 Rails 관련 질문이 아니라는 것을 알고 있지만 설명은 좋고 명확하며 아마도 다른 프레임 워크 / 프로젝트 구조로 확장 될 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.