Warcraft 3 Lua Package Manager (WLPM) 0.7-beta

Published
» Предназначение: Работа с кодом
Современное решение для разработки 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, но планируется

Для 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


Views: 4 024

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


tysch_tysch #1 - 3 years ago 0
Голосов: +0 / -0
Наши раскосые друзья (не казахи) всё равно были первыми
H #2 - 3 years ago (изм. ) 0
Голосов: +0 / -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 years ago (изм. ) 0
Голосов: +0 / -0
  1. луарокс намного сложнее интегрить в вц3 с учетом неподдержки require
  2. куча пакетов луарокс просто не запускается в вц3 из-за неполного луа парсера, а так же множество пакетов в реестре юзают сишные либы и другой нечистый луа
  3. для остального можно сделать обертки и выгрузить в отдельные форки/репо
поддержка unix
а надо? скомпилить под линукс не проблема, только вот we там нет
игнорирование не нужных файлов из гита, по .gitattributes там обычно что-то такое:
т.к. нет пакетного реестра, мы забираем готовый zip архив из репозитория, хотя в целом разумная фича. Насчет реестра это ещё надо обсудить, реестр от русских хз кого они не примут, реестр от луарокс см пункт 2, там требования слишком свободны для вц3
использования кеша и lock файлов
лок файлы есть офк, но пока только для проверки - надо ли дропать кеш, докачка не поддерживается, но в планах, см в конце поста
Drynwhyl #4 - 3 years ago 0
Голосов: +0 / -0
Я бы хотел использовать данную утилиту только как module manager, но чтобы модули описывались в файлах в папке, а не в custom script редактора. Такой вариант использования предусмотрен?
ScorpioT1000 #5 - 3 years ago (изм. ) 0
Голосов: +0 / -0
Drynwhyl, да, не указывай пункты в dependencies, а только твои папки в sources
wlpm-package.json
{
  "dependencies": {},
  "sources": [
    "это-подпапка-сурсов-в-папке-карты"
  ]
}
дальше cd путь-к-папке-карты и потом wlpm watch
Drynwhyl #6 - 3 years ago 0
Голосов: +0 / -0
ScorpioT1000, по какой-то причине код модулей не добавляется в результирующий файл. Прикрепил карту.
Прикрепленные файлы
ScorpioT1000 #7 - 3 years ago (изм. ) 4
Голосов: +4 / -0
Обновил. Но тебе надо очистить war3map.lua (всё до строки gg_trg_ini, включая переносы строк), т.к. там были проблемы с символом переноса строки

0.6.1-beta

  • Исправлено подключение локальных файлов
ScorpioT1000 #9 - 3 years ago (изм. ) 3
Голосов: +3 / -0

0.7-beta

  • Поддержка выполнения команд (afterBuild)
  • Функция install ускорена, исправлена при выполнении из пустого проекта и при включении файлов
build #11 - 11 months ago 0
Голосов: +0 / -0
Похоже, я чего-то не понял, но когда я запускаю карту из редактора, все, что до этого добавилось в war3map.lua после команды WLPM build, все это исчезает.
ScorpioT1000 #12 - 11 months ago (изм. ) 1
Голосов: +1 / -0
build, после сохранения
а watch как раз этого ждет и снова ребилдит
build #13 - 11 months ago 0
Голосов: +0 / -0
ScorpioT1000, вот да, я, кажется, забыл watch прописать. И еще, я этого не нашел в руководстве, а сам не разбираюсь в подобном: карта может быть запущена в редакторе, и работа с кодом и в РО выполняются независимо?
ScorpioT1000 #14 - 11 months ago 1
Голосов: +1 / -0
Ну, там нехитрый механизм ожидания закрытия файла war3map.lua редактором. А редактор его трогает только при сохранении. Остальные файлы не касаются самой карты.