Шаблонов генератор: Генератор шаблонов — edding


26.05.2023 Facebook Twitter LinkedIn Google+ Разное


Содержание

Создание шаблона генератора демонстраций Azure DevOps

Twitter LinkedIn Facebook Адрес электронной почты

  • Статья
  • Чтение занимает 2 мин

Azure DevOps Services

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

В этом документе описаны действия по использованию средства извлечения.

Перед началом работы

Настройте проект Azure DevOps и убедитесь, что он готов к извлечению. Средство извлечения будет записывать содержимое проекта и сохранять их в виде JSON-файлов, которые будут архивироваться в ZIP-файл.

Создание нового настраиваемого шаблона

  1. Получите доступ к генератору с помощью параметра запроса enableextractor=true, добавленного в URL-адрес: https://azuredevopsdemogenerator.azurewebsites.net/?enableextractor=true

  2. После входа на главной странице появится новая ссылка с меткой «Сборка шаблона».

  3. Выбрав, что откроет главную страницу средства извлечения на новой вкладке.

  4. Выберите организацию, а затем проект, который вы хотите превратить в шаблон.

  5. Нажмите кнопку «Анализ«. Это позволит проверить, поддерживается ли проект одним из поддерживаемых типов (только проекты на основе гибких, scrum и базовых процессов в настоящее время) и что все содержимое можно прочитать. В конце анализа вы увидите артефакты и количество элементов, чтобы убедиться, что средство извлечения правильно считывает все элементы.

  6. Если это правильно и вы хотите продолжить, нажмите кнопку «Создать Artifacts«. Это снова будет считывать все элементы из проекта, но на этот раз содержимое будет сохранено в виде данных JSON. После извлечения всех элементов папка будет архивирована в ZIP-файл.

  7. Щелкните ссылку, чтобы скачать ZIP-файл. Обратите внимание, что ZIP-файл не хранится на стороне сервера, поэтому убедитесь, что вы скачали файл. Он будет недоступен после закрытия страницы.

Примечание: Средство извлечения поддерживает только ограниченные артефакты и типы рабочих элементов, поэтому его не следует рассматривать как средство миграции для перемещения проектов с одного сервера на другой. Сведения о поддерживаемых и не поддерживаемых ограничениях см. в разделе «Ограничения»

Подготовка проекта из настраиваемого шаблона

  1. Вернитесь на страницу генератора или снова откройте ее, если она уже закрыта. В URL-адресе следует использовать параметр запроса enableextractor=true .

  2. Выбор шаблона

  3. Появится новая вкладка с меткой Private. Выберите вкладку.

  4. На закрытой вкладке можно импортировать шаблон с локального диска, GitHub или любой URL-адрес HTTPS.

    Если URL-адресу требуется проверка подлинности, укажите маркер доступа или пароль имени пользователя&.

  5. Нажмите кнопку «Отправить» , чтобы проверить шаблон и учетные данные.

  6. Если проверка действина, она примет шаблон. В поле «Выбранный шаблон » будет представлено имя шаблона.

    Теперь все готово к созданию проекта с помощью собственного шаблона


Предыдущий: использование генератора

Создание и настройка генераторов и шаблонов Rails

Генераторы Rails — необходимый инструмент, если вы планируете улучшить свой рабочий процесс. С помощью этого руководства вы изучите, как создавать генераторы и настраивать существующие.

После прочтения этого руководства, вы узнаете:

  • Как посмотреть, какие генераторы доступны в вашем приложении.
  • Как создать генератор с использованием шаблонов.
  • Как Rails ищет генераторы, чтобы вызвать их.
  • Как Rails генерирует код Rails из шаблонов.
  • Как настроить скаффолд, создавая новые генераторы.
  • Как настроить скаффолд, изменяя шаблоны генератора.
  • Как использовать фолбэки, чтобы избежать переопределения большого набора генераторов.
  • Как создать шаблон приложения.

1. Первый контакт

При создании приложения с помощью команды rails фактически вы используете генератор Rails. После этого можно получить список всех доступных генераторов, просто вызвав

bin/rails generate:

$ rails new myapp
$ cd myapp
$ bin/rails generate

Чтобы создать новое приложение rails, мы используем глобальную команду rails, которую установил гем rails с помощью gem install rails. Когда внутри директории вашего приложения, мы используем команду bin/rails, которая использует комплект rails этого приложения.

Вы получите список всех генераторов, поставляющихся с Rails. Если необходимо подробное описание, к примеру, генератора helper, можно просто сделать так:

$ bin/rails generate helper --help

2.

Создание своего генератора

Начиная с Rails 3.0, генераторы создаются на основе Thor. Thor представляет мощные опции для парсинга и великолепный API для взаимодействия с файлами. Например, давайте создадим генератор, создающий файл инициализатора с именем initializer.rb внутри config/initializers.

Первым шагом является создание файла

lib/generators/initializer_generator.rb со следующим содержимым:

class InitializerGenerator < Rails::Generators::Base
  def create_initializer_file
    create_file "config/initializers/initializer.rb", "# Add initialization content here"
  end
end

create_file — это метод, представленный Thor::Actions. Документация по create_file и другие методы Thor находятся в документации по Thor

Наш новый генератор очень прост: он наследуется от Rails::Generators::Base и содержит одно определение метода. Когда генератор вызывается, каждый публичный метод в генераторе выполняется в порядке, в котором он определен. Наконец, мы вызываем метод create_file, который создаст файл в указанном месте с заданным содержимым. Если вы знакомы с Rails Application Templates API, API генераторов покажется вам очень знакомым.

Чтобы вызвать наш новый генератор, нужно всего лишь выполнить:

$ bin/rails generate initializer

Перед тем, как продолжить, давайте посмотрим на описание нашего нового генератора:

$ bin/rails generate initializer --help

Rails обычно способен генерировать хорошие описания, если генератор расположен в пространствах имен, таких как ActiveRecord::Generators::ModelGenerator, но не в этом частном случае. Эту проблему можно решить двумя способами. Первым является вызов desc внутри нашего генератора:

class InitializerGenerator < Rails::Generators::Base
  desc "This generator creates an initializer file at config/initializers"
  def create_initializer_file
    create_file "config/initializers/initializer.rb", "# Add initialization content here"
  end
end

Теперь можно просмотреть новое описание, вызвав --help на новом генераторе.

Вторым способом является добавление описания в файле USAGE в той же директории, что и наш генератор. Мы это сделаем на следующем этапе.

3. Создание генераторов с помощью генераторов

У самих генераторов есть генератор:

$ bin/rails generate generator initializer
      create  lib/generators/initializer
      create  lib/generators/initializer/initializer_generator.rb
      create  lib/generators/initializer/USAGE
      create  lib/generators/initializer/templates
      invoke  test_unit
      create    test/lib/generators/initializer_generator_test.rb

Вот только что созданный генератор:

class InitializerGenerator < Rails::Generators::NamedBase
  source_root File.expand_path('templates', __dir__)
end

Сперва обратите внимание, что он унаследован от Rails::Generators::NamedBase вместо Rails::Generators::Base. Это означает, что наш генератор ожидает как минимум один аргумент, который будет именем инициализатора и будет доступным в нашем коде в переменной

name.

Это можно увидеть, если вызвать описание для генератора (не забудьте удалить файл старого генератора):

$ bin/rails generate initializer --help
Usage:
  bin/rails generate initializer NAME [options]

Также можно увидеть, что в нашем новом генераторе есть метод класса source_root. Этот метод указывает на место расположения шаблонов нашего генератора, если таковые имеются, и по умолчанию он указывает на созданную директорию lib/generators/initializer/templates.

Чтобы понять, что такое шаблон генератора, давайте создадим файл lib/generators/initializer/templates/initializer.rb со следующим содержимым:

# Add initialization content here

А теперь изменим генератор, чтобы он копировал этот файл при вызове:

class InitializerGenerator < Rails::Generators::NamedBase
  source_root File.expand_path('templates', __dir__)
  def copy_initializer_file
    copy_file "initializer.rb", "config/initializers/#{file_name}. rb"
  end
end

И выполним наш генератор:

$ bin/rails generate initializer core_extensions

Теперь мы видим, что инициализатор с именем core_extensions был создан в config/initializers/core_extensions.rb с содержимым нашего шаблона. Это означает, что copy_file копирует файл из корневой директории исходников в заданный путь назначения. Метод file_name автоматически создается, когда мы наследуем от Rails::Generators::NamedBase.

Доступные для генераторов методы раскрываются в последнем разделе этого руководства.

4. Поиск генераторов

При запуске bin/rails generate initializer core_extensions Rails затребует эти файлы в следующем порядке, пока один из них не будет найден:

rails/generators/initializer/initializer_generator.rb
generators/initializer/initializer_generator.rb
rails/generators/initializer_generator.rb
generators/initializer_generator.rb

Если ни один не найден, вы получите сообщение об ошибке.

Вышеуказанный пример положит файлы в папку lib приложения, поскольку сказано, что эта директория принадлежит $LOAD_PATH.

5. Настройка рабочего процесса

Собственные генераторы Rails достаточно гибки, чтобы позволить вам настроить скаффолд. Они могут быть настроены в config/application.rb, вот несколько настроек по умолчанию:

config.generators do |g|
  g.orm             :active_record
  g.template_engine :erb
  g.test_framework  :test_unit, fixture: true
end

Так как мы настраиваем наш рабочий процесс, давайте сперва посмотрим, как выглядит наш скаффолд:

$ bin/rails generate scaffold User name:string
      invoke  active_record
      create    db/migrate/20130924151154_create_users.rb
      create    app/models/user.rb
      invoke    test_unit
      create      test/models/user_test.rb
      create      test/fixtures/users.yml
      invoke  resource_route
       route    resources :users
      invoke  scaffold_controller
      create    app/controllers/users_controller. rb
      invoke    erb
      create      app/views/users
      create      app/views/users/index.html.erb
      create      app/views/users/edit.html.erb
      create      app/views/users/show.html.erb
      create      app/views/users/new.html.erb
      create      app/views/users/_form.html.erb
      invoke    test_unit
      create      test/controllers/users_controller_test.rb
      invoke    helper
      create      app/helpers/users_helper.rb
      invoke    jbuilder
      create      app/views/users/index.json.jbuilder
      create      app/views/users/show.json.jbuilder
      invoke  test_unit
      create    test/application_system_test_case.rb
      create    test/system/users_test.rb

Глядя на этот вывод, легко понять, как работают генераторы в Rails 3.0 и выше. Генератор скаффолда фактически не генерирует ничего, он просто вызывает другие. Это позволяет нам добавить/заменить/убрать любые из этих вызовов. Например, генератор скаффолда вызывает генератор scaffold_controller, который вызывает генераторы erb, test_unit и helper. Поскольку у каждого генератора одна функция, их просто использовать повторно, избегая дублирования кода.

Следующей настройкой рабочего процесса будет полное прекращение генерации таблиц стилей и фикстур для тестов скаффолда. Этого можно достичь, изменив конфигурацию следующим образом:

config.generators do |g|
  g.orm             :active_record
  g.template_engine :erb
  g.test_framework  :test_unit, fixture: false
end

Если мы сгенерируем другой ресурс с помощью генератора скаффолда, мы увидим, что ни таблица стилей, ни JavaScript, ни фикстуры более не будут созданы. Если мы захотим настраивать его дальше, например использовать DataMapper и RSpec вместо Active Record и TestUnit, это достигается всего лишь добавлением соответствующих гемов в приложение и настройкой ваших генераторов.

Для демонстрации мы собираемся создать новый генератор хелперов, который просто добавляет несколько методов-ридеров для переменных экземпляра. Сначала мы создадим генератор в пространстве имен rails, так как тут rails ищет генераторы, используемые как хуки:

$ bin/rails generate generator rails/my_helper
      create  lib/generators/rails/my_helper
      create  lib/generators/rails/my_helper/my_helper_generator. rb
      create  lib/generators/rails/my_helper/USAGE
      create  lib/generators/rails/my_helper/templates
      invoke  test_unit
      create    test/lib/generators/rails/my_helper_generator_test.rb

Можно опробовать наш новый генератор, создав хелпер для продуктов:

$ bin/rails generate my_helper products
      create  app/helpers/products_helper.rb

И следующий хелпер будет сгенерирован в app/helpers:

module ProductsHelper
  attr_reader :products, :product
end

Что, собственно, и ожидалось. Можно сообщить скаффолду использовать наш новый генератор хелпера, снова отредактировав config/application.rb:

config.generators do |g|
  g.orm             :active_record
  g.template_engine :erb
  g.test_framework  :test_unit, fixture: false
  g.helper          :my_helper
end

и увидев его в действии при вызове генератора:

$ bin/rails generate scaffold Article body:text
      [...]
      invoke    my_helper
      create      app/helpers/articles_helper. rb

Можно отметить в выводе, что был вызван наш новый генератор хелпера вместо генератора Rails по умолчанию. Однако мы кое-что упустили, это тесты для нашего нового генератора, и чтобы их сделать, мы воспользуемся старыми генераторами теста для хелперов.

Начиная с Rails 3.0, это просто, благодаря концепции хуков. Наш новый хелпер не должен быть сфокусирован на какой-то определенный тестовый фреймворк, он просто представляет хук, и тестовому фреймворку нужно всего-лишь реализовать этот хук, чтобы быть совместимым.

Для этого мы изменим генератор следующим образом:

# lib/generators/rails/my_helper/my_helper_generator.rb
class Rails::MyHelperGenerator < Rails::Generators::NamedBase
  def create_helper_file
    create_file "app/helpers/#{file_name}_helper.rb", <<-FILE
module #{class_name}Helper
  attr_reader :#{plural_name}, :#{plural_name.singularize}
end
    FILE
  end
  hook_for :test_framework
end

Теперь, когда вызывается генератор хелпера, и как тестовый фреймворк настроен TestUnit, он попытается вызвать Rails::TestUnitGenerator и TestUnit::MyHelperGenerator. Поскольку ни один из них не определен, можно сообщить нашему генератору вместо них вызывать TestUnit::Generators::HelperGenerator, который определен, так как это генератор Rails. Для этого нужно всего лишь добавить:

# Search for :helper instead of :my_helper
hook_for :test_framework, as: :helper

Теперь можно снова запустить скаффолд для другого ресурса и увидеть, что он также генерирует тесты!

6. Настройка рабочего процесса, изменяя шаблоны генераторов

На предыдущем шаге мы просто хотели добавить строчку в сгенерированный хелпер без добавления какой-либо дополнительной функциональности. Имеется более простой способ, чтобы сделать такое — замена шаблонов для уже существующих генераторов, в нашем случае Rails::Generators::HelperGenerator.

В Rails 3.0 и выше генераторы не просто ищут шаблоны в корневом пути, они также ищут по другим путям. И одно из них — lib/templates. Поскольку мы хотим изменить Rails::Generators::HelperGenerator, можно это осуществить, просто сделав копию шаблона в lib/templates/rails/helper с именем helper. rb. Так давайте же создадим этот файл со следующим содержимым:

module <%= class_name %>Helper
  attr_reader :<%= plural_name %>, :<%= plural_name.singularize %>
end

и отменим последнее изменение в config/application.rb:

config.generators do |g|
  g.orm             :active_record
  g.template_engine :erb
  g.test_framework  :test_unit, fixture: false
  g.stylesheets     false
end

Теперь, если сгенерируете другой ресурс, то увидите похожий результат!

Еще одним обычным использованием пользовательских шаблонов является переопределение шаблонов скаффолда вью по умолчанию. Любой из них можно переопределить, создав соответствующий файл (например, index.html.erb, show.html.erb, и т.д.) в lib/templates/erb/scaffold.

Шаблоны скаффолда в Rails часто используют теги ERB; эти теги необходимо экранировать, чтобы сгенерированный результат являлся валидным кодом ERB.

Например, в шаблоне необходим следующий экранированный тег ERB (обратите внимание на дополнительный %). ..

<%%= stylesheet_link_tag :application %>

…чтобы сгенерировать следующий результат:

<%= stylesheet_link_tag :application %>

7. Добавление фолбэков генераторов

Еще одна особенность генераторов, которая очень полезна, это фолбэки. Например, представим, что вы хотите добавить особенность над TestUnit, такую как shoulda. Так как TestUnit уже реализует все генераторы, требуемые Rails, а shoulda всего лишь хочет переопределить часть из них, нет необходимости для shoulda переопределять некоторые генераторы, она может просто сообщить Rails использовать генератор TestUnit, если такой не найден в пространстве имен Shoulda.

Можно с легкостью смоделировать это поведение, снова изменив наш config/application.rb:

config.generators do |g|
  g.orm             :active_record
  g.template_engine :erb
  g.test_framework  :shoulda, fixture: false
  # Добавим фолбэк!
  g.fallbacks[:shoulda] = :test_unit
end

Теперь, если создать скаффолд Comment, вы увидите, что были вызваны генераторы shoulda, но в итоге они всего лишь переуступили генераторам TestUnit:

$ bin/rails generate scaffold Comment body:text
      invoke  active_record
      create    db/migrate/20130924143118_create_comments. rb
      create    app/models/comment.rb
      invoke    shoulda
      create      test/models/comment_test.rb
      create      test/fixtures/comments.yml
      invoke  resource_route
       route    resources :comments
      invoke  scaffold_controller
      create    app/controllers/comments_controller.rb
      invoke    erb
      create      app/views/comments
      create      app/views/comments/index.html.erb
      create      app/views/comments/edit.html.erb
      create      app/views/comments/show.html.erb
      create      app/views/comments/new.html.erb
      create      app/views/comments/_form.html.erb
      invoke    my_helper
      create      app/helpers/comments_helper.rb
      invoke      shoulda
      create        test/helpers/comments_helper_test.rb
      invoke    jbuilder
      create      app/views/comments/index.json.jbuilder
      create      app/views/comments/show.json.jbuilder
      invoke  test_unit
      create    test/application_system_test_case.rb
      create    test/system/comments_test. rb

Фолбэки позволяют вашим генераторам иметь единственную ответственность, увеличить повторное использование кода и уменьшить дублирование.

8. Шаблоны приложения

Теперь, когда вы узнали, как генераторы используются внутри приложения, знаете ли вы, что они используются и для генерации приложения тоже? Этот тип генератора называют «template». Далее идет краткий обзор Templates API. Подробную информацию смотрите в руководстве Шаблоны приложения на Rails.

gem "rspec-rails", group: "test"
gem "cucumber-rails", group: "test"
if yes?("Would you like to install Devise?")
  gem "devise"
  generate "devise:install"
  model_name = ask("What would you like the user model to be called? [user]")
  model_name = "user" if model_name.blank?
  generate "devise", model_name
end

В вышеприведенном шаблоне мы определили, что приложение полагается на гемы rspec-rails и cucumber-rails, поэтому они будут добавлены в группу test в Gemfile. Затем мы зададим вопрос пользователю относительно того, хочет ли он установить Devise. Если пользователь ответит «y» или «yes» на этот вопрос, тогда шаблон добавит Devise в Gemfile вне какой-либо группы, а затем запустит генератор devise:install. Затем этот шаблон возьмет пользовательский ввод и запустит генератор devise с переданным ответом пользователя из последнего вопроса.

Представим, что этот шаблон был в файле template.rb. Можно его использовать, чтобы модифицировать результат команды rails new с помощью опции -m и передачей имени файла:

$ rails new thud -m template.rb

Эта команда сгенерирует приложение Thud, а затем применит шаблон к сгенерированному результату.

Шаблоны не обязательно должны храниться в локальной системе, опция -m также поддерживает онлайн шаблоны:

$ rails new thud -m https://gist.github.com/radar/722911/raw/

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

9. Добавление аргументов командной строки

Генераторы Rails легко модифицировать, чтобы они принимали произвольные аргументы командной строки. Эта функциональность исходит из Thor:

class_option :scope, type: :string, default: 'read_products'

Теперь наш генератор может быть вызван следующим образом:

$ bin/rails generate initializer --scope write_products

К аргументам командной строки можно обратиться с помощью метода options в классе генератора. То есть:

@scope = options['scope']

10. Методы генератора

Следующие методы доступны как для генераторов, так и для шаблонов Rails.

Методы, представленные Thor не раскрываются в этом руководстве, а находятся в документации по Thor

10.1.
gem

Указывает зависимость приложения от гема.

gem "rspec", group: "test", version: "2.1.0"
gem "devise", "1.1.5"

Доступны следующие опции:

  • :group — Группа в Gemfile, где должен быть гем.
  • :version — Строка версии гема, которую нужно использовать. Также может быть указана в качестве второго аргумента метода.
  • :git — URL репозитория git для этого гема.

Любые дополнительные опции, переданные в этот метод помещаются в конце строчки:

gem "devise", git: "https://github.com/plataformatec/devise.git", branch: "master"

Вышеприведенный код поместит следующую строчку в Gemfile:

gem "devise", git: "https://github.com/plataformatec/devise.git", branch: "master"
10.2.
gem_group

Оборачивает вхождения гемов в группу:

gem_group :development, :test do
  gem "rspec-rails"
end
10.3.
add_source

Добавляет определенный источник в Gemfile:

add_source "http://gems.github.com"

Этот метод также принимает блок:

add_source "http://gems.github.com" do
  gem "rspec-rails"
end
10.4.
inject_into_file

Встраивает блок кода в определенную позицию вашего файла.

inject_into_file 'name_of_file.rb', after: "#The code goes below this line. Don't forget the Line break at the end\n" do <<-'RUBY'
  puts "Hello World"
RUBY
end
10.5.
gsub_file

Заменяет текст в файле.

gsub_file 'name_of_file.rb', 'method.to_be_replaced', 'method.the_replacing_code'

Этот метод можно сделать более точным с помощью регулярных выражений. Таким же образом можно использовать append_file и prepend_file, чтобы поместить код в начало или конец файла соответственно.

10.6.
application

Добавляет строчку в config/application.rb непосредственно после определения класса приложения.

application "config.asset_host = 'http://example.com'"

Также этот метод может принимать блок:

application do
  "config.asset_host = 'http://example.com'"
end

Доступные опции:

  • :env — Определяет среду для этой конфигурационной опции. Если хотите использовать эту опцию с блочным синтаксисом, рекомендуемый синтаксис следующий:
application(nil, env: "development") do
  "config.asset_host = 'http://localhost:3000'"
end
10.7.
git

Запускает определенную команду git:

git :init
git add: "."
git commit: "-m First commit!"
git add: "onefile.rb", rm: "badfile.cxx"

Значения хэша будут аргументами или опциями, переданными в определенную команду git. Как показано в последнем примере, одновременно могут быть определены несколько команд git, но не гарантируется соответствие порядка их запуска порядку, в котором они определены.

10.8.
vendor

Помещает файл, содержащий указанный код, в vendor.

vendor "sekrit.rb", '#top secret stuff'

Этот метод также принимает блок:

vendor "seeds.rb" do
  "puts 'in your app, seeding your database'"
end
10.9.
lib

Помещает файл, содержащий указанный код, в lib.

lib "special.rb", "p Rails.root"

Этот метод также принимает блок:

lib "super_special.rb" do
  "puts 'Super special!'"
end
10.10.
rakefile

Создает файл Rake в директории lib/tasks приложения.

rakefile "test.rake", 'task(:hello) { puts "Hello, there" }'

Этот метод также принимает блок:

rakefile "test.rake" do
  %Q{
    task rock: :environment do
      puts "Rockin'"
    end
  }
end
10.11.
initializer

Создает инициализатор в директории config/initializers приложения:

initializer "begin.rb", "puts 'this is the beginning'"

Этот метод также принимает блок и ожидает возврата строки:

initializer "begin.rb" do
  "puts 'this is the beginning'"
end
10.12.
generate

Запускает указанный генератор, где первый аргумент это имя генератора, а оставшиеся аргументы передаются непосредственно в генератор.

generate "scaffold", "forums title:string description:text"
10.
13. rake

Запускает указанную задачу Rake.

rake "db:migrate"

Доступные опции:

  • :env — Указывает среду, в которой запускается эта задача rake.
  • :sudo — Запускать ли эту задачу с помощью sudo. По умолчанию false.
10.14.
route

Добавляет текст в файл config/routes.rb:

route "resources :people"
10.15.
readme

Выводит содержимое файла из source_path шаблона, обычно README.

readme "README"

300 000+ бесплатных шаблонов и различных тем оформления на любой вкус

Шаблон поздравительной открытки с розовыми 3d иллюстрациями в виде сердец

Шаблон поздравительной открытки с днем ​​​​рождения с золотыми лунными звездами

Шаблон открытки с пожеланиями ко дню рождения матери

Цветочная иллюстрация Шаблон поздравительной открытки с Рождеством

Blue Family Merry Christmas Card Template

Beige Illustration Photo Collage Happy Birthday Card Template

Green Elegant Merry Christmas Card Template

Шаблон свадебной благодарственной открытки

Шаблон черной рождественской открытки

Шаблон белой простой открытки с Рождеством

Шаблон зелено-белой акварельной благодарственной открытки

Шаблон открытки с черными точками и Рождеством

Красно-белое Рождество Шаблон поста в Facebook

Современный бизнес-тренинг Шаблон сообщения в Facebook

Желтое цифровое агентство Шаблон сообщения в Facebook

Красные рождественские подарочные коробки Праздничное желание Шаблон сообщения в Facebook

Оранжевая светящаяся рождественская елка Промо-шаблон для публикации в Facebook

Синяя светящаяся рождественская елка Шаблон для публикации в Facebook

Белое элегантное рождественское пожелание любви Шаблон для публикации в Facebook

Черно-розовая простая черная пятница Специальное предложение Шаблон для публикации в Facebook

Blue Digital Marketing Agency Введение Шаблон сообщения Facebook

Оранжевая весенняя распродажа мебели Шаблон сообщения Facebook

Розовая цитата Международный женский день Шаблон сообщения Facebook

Red Christmas Wish Love Семейный коллаж Шаблон поста в Facebook

Шаблон приглашения на новогоднюю вечеринку на Рождество

Шаблон приглашения на ботаническую церемонию крещения

Шаблон приглашения на вечерний прием

Шаблон приглашения на рождественскую вечеринку Red Santa

3

Шаблон приглашения в канун Рождества 90 Petvit 20002 Ужин в канун Рождества Шаблон приглашения на день рождения

Шаблон приглашения на белую ботаническую свадьбу

Шаблон приглашения на рождественскую танцевальную вечеринку в белом цвете

Темно-золотой шаблон приглашения на вечеринку по случаю 60-летия

Синий шаблон приглашения на репетицию ужина

Желтый шаблон приглашения на вечеринку воссоединения одноклассников

Шаблон приглашения на шоу талантов

Оранжевый Шаблон простой современной летней моды в Instagram Шаблон истории Instagram

Selfile My Story Player

Напоминание о возвращении в школу Шаблон истории Instagram

Синий летний коллаж Шаблон истории Instagram

White Elegant Christmas Wish Love Collage Шаблон истории Instagram

Летняя поездка в Лондон Шаблон истории Instagram

Шаблон истории Instagram Pink Eyebrow Beauty

Шаблон истории Instagram White Love You Girl

Шаблон истории Instagram Vintage Life Tap

Брендинг Black Friday Jewlry Sale Promotion Instagram Story Template

Yellow Hiking Sport Instagram Story Template

Colorful Rainbow Polaroid Pride Month Photo Collage Instagram Story Template

Шаблон обложки Facebook Red 3d Illustration Christmas

Шаблон обложки Facebook Green Christmas Holiday Photo Collage

Шаблон обложки Facebook Red Life Collage Banner

Шаблон обложки Facebook Black Digital Marketing Agency

Шаблон обложки Facebook White Modern Christmas Family Photo Collage

Фото Рождество Шаблон обложки Facebook

Blue Creative Company Шаблон обложки Facebook

Зеленый Шаблон обложки Facebook для социальных сетей

Шаблон обложки Facebook для блога о путешествиях

Розовый шаблон обложки Facebook с милой иллюстрацией Merry Christmas

Розовый шаблон обложки Facebook для рождественской распродажи интернет-магазина

Темно-синий шаблон обложки Facebook с Рождеством

Шаблон флаера для распродажи постельного белья в розовых и желтых тонах

White And Blue Simple Business Веб-дизайн Маркетинговая реклама Шаблон флаера

Шаблон флаера для продажи дома

Темно-коричневый массажный центр Шаблон флаера для торжественного открытия

Шаблон флаера «Белый и красный день открытых дверей»

Шаблон флаера «Весеннее путешествие»

Шаблон флаера «Белый день открытых дверей»

Шаблон флаера «Юридическое бюро»

Шаблон флаера «Зеленый давайте организуем ваш отпуск»

Шаблон флаера «Слово ждет»

Шаблон листовки Green Spa

Шаблон листовки магазина Pink Fresh Bread

Красные рождественские подарочные коробки Шаблон плаката с праздничными пожеланиями

Шаблон плаката Рождественского специального предложения Toy House

Шаблон плаката с приглашением на праздничную вечеринку в бежевых цветах

Шаблон плаката к Международному женскому дню с розовой цитатой

Шаблон плаката с серым пропавшим без вести

Шаблон плаката с распродажей в белый понедельник

Шаблон плаката с бежевым фотоколлажем Windows Frames Коллекция моды

Зеленый Плакат с пожеланиями счастливого Рождества Шаблон

Розовый цветочный плакат с приглашением на праздничную вечеринку Шаблон

Игрушечный домик Merry Christmas Специальная скидка Плакат Шаблон

Yellow Modern We Are Hiring Poster Template

Красный и черный шаблон плаката встречи информационных технологий

Black Branding Marketing Marketing Business Card Шаблон

Black And Yellow Marketing Business Шаблон визитной карточки

Green Business Представляем шаблон визитной карточки

New Шаблон визитной карточки брокера агентства Century Agency

Шаблон визитной карточки компании Simple Black Architecture Design

Желтый Личный профиль Резюме Шаблон визитной карточки

Шаблон визитной карточки для жилых и коммерческих помещений

Шаблон визитной карточки Pink Art Of Food

Шаблон визитной карточки Pink Fashion Simple Branding

Шаблон визитной карточки центра красоты черного цвета

Шаблон визитной карточки Blue Yellow Critical Business Plan

Red Бизнес-план Продажи Презентация Шаблон визитной карточки

Черный Элегантный классический шаблон сообщения в Instagram с Рождеством

Белый Современная женская одежда Интернет-магазин модной одежды Шаблон сообщения в Instagram

Red Christmas Dessert Recipe Шаблон сообщения Instagram

Blue Summer Ocean Collage Шаблон сообщения Instagram

Blakc Elegant Classic Merry Christmas Шаблон сообщения Instagram

Beige Christmas Quote Шаблон сообщения Instagram

Black Elegant Classic Merry Christmas Шаблон сообщения Instagram

French Vintage Fashion Sale Branding Instagram Post Template

White Summer Passion Instagram Post Template

Yellow Woman High-Helled Shoes Летняя распродажа Instagram Post Template

White Closed Notification Instagram Post Template

Simple Clean Chtritmas Wish Instagram Post Template

Relaxing Sunset Inspirational Quote Шаблон обоев для рабочего стола

Simple White No Change No Growth Wallpaper Шаблон обоев для рабочего стола

Snow Mountain Wallpaper Desktop Wallpaper Template

Black Snow Горные обои Шаблон обоев для рабочего стола

Бежевый минималистский персональный органайзер для рабочего стола Шаблон обоев для рабочего стола

Шаблон обоев для рабочего стола Simple Be A Nice Human

Шаблон обоев для рабочего стола Astronomical Universe

Шаблон обоев для рабочего стола Blue Sea Компьютерные обои

Шаблон обоев для рабочего стола Yellow Desert And Sky

Шаблон обоев для рабочего стола с простой цитатой

Ночной монтаж Фотоколлаж Шаблон обоев для рабочего стола

Осенний сезон Фотоколлаж Шаблон обоев для рабочего стола

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

…Развернуть

Онлайн-конструктор шаблонов — Artboard Studio

Artboard Studio предлагает совершенно новый уровень создания шаблонов. Ознакомьтесь с нашей постоянно растущей библиотекой и выберите наиболее подходящий шаблон для вашего бренда.

Начните бесплатно

Выберите один из наших тщательно разработанных бесплатных шаблонов или начните с нуля и создайте собственную сцену с помощью нашей обширной библиотеки элементов.

Просмотреть все шаблоны

  • Минималистичный современный геометрический стиль Новые поступления Модная распродажа Instagram Story Template

  • Вид спереди Шаблон макета для двух больших футболок

  • iPhone 13 Pro Graphite Шаблон макета для полета в темноте

  • Вид сверху Открытый твердый теневой картон Почтовая коробка с круглыми наклейками Шаблон 9003 2 5 2 0 9 0 9 0 9 Жесткая тень Желтая стеклянная бутылка-капельница с лаймом Шаблон макета

  • Вид в высоком ракурсе Открытая толстая книга в твердом переплете Шаблон макета

  • Листовая ветвь и круглый деревянный поднос США Канада Размер визитной карточки Шаблон макета

  • Простой зеленый фирменный стиль Шаблон макета для печати

  • Шаблон макета веб-сайта Apple для нескольких устройств

Просмотреть все шаблоны

Шаблоны для создания футболок в браузере highquality. t-shirt

3 Различные макеты рубашек разных форм и цветов ждут замены ваших дизайнов.

Шаблоны для социальных сетей

Выделитесь среди своих конкурентов, используя эти привлекательные шаблоны для социальных сетей. В несколько кликов ваш шаблон готов.

Шаблоны для iPhone

Не ищите больше самых эффективных шаблонов. Проявите творческий подход с этими шаблонами для iPhone. Просто добавьте информацию за считанные секунды. Вот и все!

Шаблоны для канцелярских принадлежностей

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

Шаблоны историй Instagram

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

Шаблоны сумок

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

  • Шаблоны футболок

    Создавайте высококачественные макеты футболок в своем браузере. Различные макеты рубашек разных форм и цветов ждут замены ваших дизайнов.

    Подробнее

  • Шаблоны для социальных сетей

    Выделитесь среди своих конкурентов, используя эти привлекательные шаблоны для социальных сетей. В несколько кликов ваш шаблон готов.

    Узнать больше

  • Шаблоны для iPhone

    Не ищите дальше самых эффективных шаблонов. Проявите творческий подход с этими шаблонами для iPhone. Просто добавьте информацию за считанные секунды. Вот и все!

    Узнать больше

  • Шаблоны канцелярских товаров

    Ознакомьтесь с нашими любимыми шаблонами канцелярских товаров, которые подходят для любого бизнеса. Все они легко настраиваются, удобны для пользователя и визуально привлекательны.

    Узнать больше

  • Шаблоны историй в Instagram

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

    Узнать больше

  • Шаблоны сумок

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

Comments