Warcraft 3 Lua Package Manager (WLPM) 0.7-beta

» опубликован
» Предназначение: Работа с кодом
Современное решение для разработки Warcraft 3 карт!
Вносит менеджмент пакетов и es6-подобные Lua модули в проект твоей карты.

Возможности

WLPM состоит из менеджера пакетов (Package Manager) и менеджера модулей (Module Manager) с собственной частью кода на Lua.
Мы вводим новый способ работы с зависимостями - WLPM Module Manager.

Возможности Package Manager

  • Работает с картами в режиме карта-как-директория
  • Свой формат файла конфигурации в JSON
  • Устанавливает пакеты с зависимостями из Github и Bitbucket
  • Устанавливает Lua файлы напрямую из Github, Bitbucket или заданных хостов в конфиге
  • Отслеживание изменений (watcher) файлов и директорий (war3map.lua, sources, конфиг)
  • Разрешение версий зависимостей

Возможности Module Manager

  • Включение заданных пользователем директорий как зависимостей
  • Верный порядок зависимостей в целевом (target) файле
  • ES6-подобный импорт и экспорт в скриптах Lua
  • Реально быстрая компиляция target файла на ходу (C# watcher)

Скачать

WLPM для Windows 10 x64
WLPM для любой Windows (совместимость)
WLPM для macOS (планируется, ждём фиксов Warcraft 3 )

Быстрый Старт

  1. Установи WLPM
  2. Сохрани свою карту как директорию (пункт меню Сохранить как...)
  3. Открой любое окно терминала (нажать Win+R и ввести "cmd")
  4. ввести cd <директория твоей карты>
  5. после ввести wlpm - он покажет применимые команды
Чтобы инициализировать свой проект, ввести wlpm update. Он создаст wlpm-package.json и директорию .wlpm с зависимостями. Если ты используешь git (mercurial/svn/...), добавь .wlpm в свой игнор-файл (.gitignore).
Чтобы добавить новую зависимость, нужно ввести wlpm install <пакет> <версия>

Пример:

wlpm install https://github.com/Indaxia/wlpm-wc3-demo-hello
Мы не рекомендуем использовать "любую" версию в публичных проектах. Некоторые злоумышленники или краденные аккаунты могут обновить код и сделать его вредоносным.

Пример с конкретной версией (загружается из git tag):

wlpm install https://github.com/Indaxia/wlpm-wc3-demo-hello 1.1
Используй wlpm watch, чтобы вотчер уведомлял PM и MM, если что-то изменилось и производил загрузку новых пакетов и/или пересобирал модули.
Подробная помощь по менеджеру модулей находится в документации MM.

Расширенное Использование

Включение Файлов

Ты можешь включать файлы напрямую (пример с Big Integer):
wlpm install https://raw.githubusercontent.com/DeBos99/lua-bigint/master/bigint.lua * file

Выключение скрипта менеджера модулей (MM)

Если ты не хочешь использовать MM на стороне клиента (Lua), его можно отключить, добавив новую опцию в свой wlpm-package.json:
  "insertModuleLoader": false
С этой опцией MM просто включает код зависимостей без скрипта MM.

Выполнение команд после сборки

Можно выполнить команду терминала после окончания процесса сборки:
```
"afterBuild": "echo \"hello world\""
```
Работает только для корневых проектов.

Публикация Пакетов

Если ты хочешь опубликовать свой пакет, выполни следующие шаги:
  1. Создай git репозиторий на Github или Bitbucket
  2. Создай wlpm-package.json в корне репозитория
  3. Добавь параметры "dependencies" и "sources". Ориентируйся на пример конфига, описанного ниже.
  4. (опционально) добавь репозиторию git tag
  5. Теперь твой репозиторий - это пакет WLPM!

Пример полного конфига (wlpm-package.json)

{
    "title": "WLPM - Demo Map Package", // (необязательно) название вашего пакета или корневого проекта
    "author": "ScorpioT1000 / scorpiot1000@yandex.ru", // (необязательно) информация об авторе
    "license": "MIT", // (необязательно) лицензия исходного кода
    "dependencies": { // список пакетов и файлов, требуемых вашим исходным кодом
        // github репозиторий из master ветки
        "https://github.com/123/456": "*",
        
        // github репозиторий из релиза, отмеченного тагом "1.1.1"
        "https://github.com/123/456": "1.1.1",
        
        // bitbucket репозиторий из релиза, отмеченного тагом "1.0.0" в формате объекта
        "https://bitbucket.org/123/789": { "type": "package", "version": "1.0.0" },
        
        // вставляет файл напрямую
        "https://github.com/123/456/blob/master/somefile.lua": { 
            "type": "file", 
            "topOrder": true  // опустите этот параметр или установите значение false для вставки файла после кода репозиториев
        }
    },
    // (необязательно для корневого проекта) где хранятся ваши исходники. Это важно для пакета, но может быть опущено для корневого проекта (он смотрит "target")
    "sources": [
        "src"
    ],
    // (опционально) где хранить скомпилированную сборку lua. Работает только для корневого проекта.
    "target": "war3map.lua",
    // (необязательно) выполнить эту команду после сборки, например, "echo \"Hello!\""
    "afterBuild": "",
    // (необязательно) установить false, если требуется заменить встроенный менеджер модулей собственным
    "insertModuleLoader": true,
    // (необязательно) разрешить больше хостов для подключения файлов напрямую (по умолчанию разрешает github.com и bitbucket.org). Работает только для корневого проекта.
    "allowHosts": []
    // (необязательно) задать своё расширение файлов из "sources"
    "sourceExtensions": "*.lua"
}

Ограничения

  1. Не поддерживает частичную подстановку версий типа 1.*, т.к. он не использует реестр пакетов
  2. Производит полное повторное скачивание при любом изменении требований в конфиге (планируется исправить в дальнейшем)
  3. Пока нет интеграции с VSCode, но планируется
  4. Пока не реализовано выполнение заданных пользователем скриптов после сборки

Для C# разработчиков

Вы можете делать форки и создавать свои собственные модификации! Мое требование заключается в том, что любые поля "автор" в коде C# могут быть только дополнены(!).

Как скомпилировать

$version = git describe --tags --abbrev=0
dotnet publish -c Release --self-contained --runtime win10-x64 /property:Version=$version
dotnet publish -c Release --self-contained --runtime win-x86 /property:Version=$version


Просмотров: 1 207

» Лучшие комментарии


tysch_tysch #1 - 3 месяца назад 0
Наши раскосые друзья (не казахи) всё равно были первыми
H #2 - 3 месяца назад (отредактировано ) 0
Я в lua не очень шарю, не знаю как юзается он в wc3, но вроде это же просто доставка lua файликов до конечной папки? Не пробовал готовые решения юзать? Типо этого
А внутри уже можно юзать свои module manager'ы сколько угодно.
У серьезных менеджеров пакетов есть очевидные фичи про которые ты мог не знать/ не делать:
  • поддержка unix
  • игнорирование не нужных файлов из гита, по .gitattributes там обычно что-то такое:
.editorconfig export-ignore
.gitattributes export-ignore
.gitignore export-ignore
.travis.yml export-ignore
  • решение конфликтов, свое хранилище пакетов (если вдруг гит не доступен), использования кеша и lock файлов, чтобы скачивать в точности такие же пакеты и т.п.
ScorpioT1000 #3 - 3 месяца назад (отредактировано ) 0
  1. луарокс намного сложнее интегрить в вц3 с учетом неподдержки require
  2. куча пакетов луарокс просто не запускается в вц3 из-за неполного луа парсера, а так же множество пакетов в реестре юзают сишные либы и другой нечистый луа
  3. для остального можно сделать обертки и выгрузить в отдельные форки/репо
поддержка unix
а надо? скомпилить под линукс не проблема, только вот we там нет
игнорирование не нужных файлов из гита, по .gitattributes там обычно что-то такое:
т.к. нет пакетного реестра, мы забираем готовый zip архив из репозитория, хотя в целом разумная фича. Насчет реестра это ещё надо обсудить, реестр от русских хз кого они не примут, реестр от луарокс см пункт 2, там требования слишком свободны для вц3
использования кеша и lock файлов
лок файлы есть офк, но пока только для проверки - надо ли дропать кеш, докачка не поддерживается, но в планах, см в конце поста
Drynwhyl #4 - 3 месяца назад 0
Я бы хотел использовать данную утилиту только как module manager, но чтобы модули описывались в файлах в папке, а не в custom script редактора. Такой вариант использования предусмотрен?
ScorpioT1000 #5 - 3 месяца назад (отредактировано ) 0
Drynwhyl, да, не указывай пункты в dependencies, а только твои папки в sources
wlpm-package.json
{
  "dependencies": {},
  "sources": [
    "это-подпапка-сурсов-в-папке-карты"
  ]
}
дальше cd путь-к-папке-карты и потом wlpm watch
Drynwhyl #6 - 3 месяца назад 0
ScorpioT1000, по какой-то причине код модулей не добавляется в результирующий файл. Прикрепил карту.
прикреплены файлы
ScorpioT1000 #7 - 3 месяца назад (отредактировано ) 4
Обновил. Но тебе надо очистить war3map.lua (всё до строки gg_trg_ini, включая переносы строк), т.к. там были проблемы с символом переноса строки

0.6.1-beta

  • Исправлено подключение локальных файлов
ScorpioT1000 #8 - 3 месяца назад (отредактировано ) 3

0.7-beta

  • Поддержка выполнения команд (afterBuild)
  • Функция install ускорена, исправлена при выполнении из пустого проекта и при включении файлов