Как управлять внешними библиотеками JS/CSS на GitHub

Для моего проекта Java, который использует Maven, я недавно добавил Twitters Bootstrap в мой репозиторий на GitHub. Теперь я заметил, что моя статистика языка GitHub изменилась с

  • 100% Java

к

  • 66,% Java 33,3% JavaScript

Поскольку я не писал JS-часть, есть ли способ управления, что это не считается моим или как один обычно управляет внешним JS-кодом в репозитории GitHub или проектами в вообще

Ответ 1

В последнее время я столкнулся с этой проблемой. Есть несколько способов справиться с этим:

  • используйте оптимизированные по производительности версии, например bootstrap.min.js вместо bootstrap.js и т.д. GitHub использует размер файла, чтобы определить долю языка каждого репозитория. Это не уменьшит его до нуля, но, по крайней мере, уменьшит пропорцию

  • Это может быть то, что вы хотите: GitHub имеет список поставщиков с регулярными выражениями, которые используются из графика языка. Там вы увидите, что jQuery уже является частью исключения. Существует также ожидающий запрос на тягу, чтобы добавить Twitter Bootstrap. Если это не пройдет, вы всегда можете добавить файлы в каталог с именем vendor, там они будут исключены из статистики.

  • используйте Maven AntRun Plugin: с его помощью вы можете просто загрузить файлы библиотеки JavaScript по запросу с Ant Получить

  • существуют также репозитории Maven для этих библиотек JavaScript: Bootstrap-Maven. Тем не менее, файлы установлены на /ext/bootstrap/, и я не знаю, как это помогает

  • есть еще больше решений, таких как Maven War Plugin с использованием оверлеев.

Наконец, мой совет: просто поместите файлы в свой репозиторий. Я рассмотрел некоторые более крупные проекты на GitHub, используя jQuery и Twitter Bootstrap, и они все помещают свои файлы библиотеки JavaScript в репозиторий.

Преимущество этих файлов библиотеки JavaScript заключается в том, что их не нужно компилировать так, как никогда. Используйте это преимущество и не добавляйте дополнительное бремя ради эстетики. Лучшая практика, похоже, добавляет ее в репозиторий и живет с глупым графиком языка. Кто знает, возможно, некоторые файлы будут проигнорированы в будущем.

Ответ 2

Два наблюдения:

  • Статистика GitHub неверна: ваш проект состоит из этих сумм кода Java и JavaScript. Было бы неправильно сказать, что это 100% проект Java.
  • Это не так, чтобы включать зависимости в свой собственный репозиторий кода. Вы устанавливаете их вручную или автоматически (используя систему/метод, который варьируется для каждого языка/среды программирования). Например, у Python есть файл с именем require.txt, в котором перечислены зависимости, но в Java я могу представить, что подобный подход.

Ответ 3

Используйте подмодули git или поместите ваши сторонние файлы в каталог с именем "vendor". Тогда Github не будет считать их частью вашего кода

Ответ 4

Лучшей практикой Maven является разделение проекта на несколько подмодулей, каждый из которых имеет небольшую четко определенную цель. Если вы используете разные источники в одном модуле Maven, вы не используете его правильно. Предполагая, что в итоге вы закончите с .war, тогда мой совет - добавить Bootstrap, jQuery и любые другие библиотеки, которые вы используете в качестве zip-зависимостей, которые будут включены в сборку war.

Предположим, что вы можете получить эти библиотеки в качестве загружаемых зависимостей Maven (я расскажу ниже о ваших вариантах выполнения этого), тогда вам просто нужно объявить их как зависимости для вашего артефакта войны:

  <dependency>
    <groupId>com.twitter.bootstrap</groupId>
    <artifactId>twitter-bootstrap</artifactId>
    <version>2.0.4</version>
    <type>zip</type>
    <scope>runtime</scope>
  </dependency>

Что касается вашего собственного кода, то это все Bootstrap, который вам нужно включить.

Как вы можете получить этот почтовый индекс? Наилучшим было бы увидеть, как это опубликовано в центральном репозитории Maven, но это не то, что вы должны делать; Twitter должен активировать и заботиться обо всех пользователях Maven.

Следующее лучшее было бы найти другой публичный репозиторий, который уже размещает его хорошо упакован, но я не смог найти его с красивой упаковкой после короткого поиска Google, возможно, вам повезет больше.

Третий вариант - взять вещи в свои руки и быть тем, кто создает правильную сборку Maven для этого zip и публиковать ее в своем собственном репозитории.

Одним из решений, которые я предпочитаю для создания таких ресурсов, является использование плагина сборки maven, и вы можете использовать в качестве вдохновения этот проект maven: поместите источники (js, css и файлы изображений) в src/main/resources и добавьте простой файл сборки, который просто копирует все файлы из каталога ресурсов в zip. Настройте хранилище maven на сервере (достаточно простой HTTP-службы с доступом sftp), и выполните выпуск maven в этом проекте, чтобы загрузить артефакт на сервере.

(В любом случае у вас должен быть репозиторий maven для выпуска ваших собственных проектов)

Затем вам нужно будет объявить ваш репозиторий в вашем реальном файле pom проекта, добавить зависимость от артефакта bootstrap и настроить плагин maven-dependency, чтобы разархивировать его в выбранном вами месте:

...
  <repositories><repository>
    <id>bootstrap-repo</id>
    <name>bootstrap public repository</name>
    <url>http://repo.yourhost.net/release</url>
    <releases>
      <enabled>true</enabled>
    </releases>
    <snapshots>
      <enabled>false</enabled>
    </snapshots>
  </repository></repositories>
...
  <dependencies><dependency>
    <groupId>com.twitter.bootstrap</groupId>
    <artifactId>twitter-bootstrap</artifactId>
    <version>2.0.4</version>
    <type>zip</type>
    <scope>runtime</scope>
  </dependency></dependencies>
...
  <build><plugins><plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
      <execution>
        <id>unpack-dependencies</id>
        <phase>prepare-package</phase>
        <goals>
          <goal>unpack</goal>
        </goals>
        <configuration>
          <artifactItems>
            <!-- Unpack the Bootstrap library -->
            <artifactItem>
              <groupId>com.twitter</groupId>
              <artifactId>twitter-bootstrap</artifactId>
              <type>zip</type>
              <outputDirectory>${project.build.directory}/bootstrap</outputDirectory>
            </artifactItem>
          </artifactItems>
        </configuration>
      </execution>
    </executions>
  </plugin></plugins></build>
...

(Я не уверен, что было бы безопасно использовать com.twitter как groupId, так как они не те, которые публикуют этот артефакт, поэтому используйте свою собственную группуId)

Поскольку ваш собственный код просто объявляет зависимость от этого артефакта twitter-bootstrap, вы можете сохранить свой основной репозиторий GitHub чистым от стороннего кода. Вам не нужно фиксировать проект, который вообще создает артефакт twitter-bootstrap, если вы не хотите, чтобы ваша статистика кодирования влияла, хотя каждая строка кода, который вы пишете, должна быть зафиксирована.

Альтернатива: maven-antrun-plugin

Альтернативой использованию запрещенной упаковки сторонних библиотек является извлечение этих файлов из их официальных почтовых дистрибутивов с помощью ant задач в maven-antrun-plugin загрузить zip и извлечь из него файлы.

Или вы можете использовать этот трюк в проекте twitter-bootstrap maven, чтобы вообще не копировать исходные файлы.

Ответ 5

Вопрос довольно старый, но для будущей ссылки следует отметить, что GitHub добавила в 2014 новую функцию для обработки этой вещи, Возможно, благодаря открытому issue на linguist.

Эта функция позволяет рассматривать определенные файлы как библиотеки, документацию или определенный язык.

Просто добавьте файл .gitattributes в ваш репозиторий. Например, чтобы игнорировать библиотечную папку, просто добавьте строку:

library/* linguist-vendored

Или, чтобы установить папку документов, добавьте строку:

docs/* linguist-documentation

Дополнительные примеры можно найти здесь.