Warcraft 3 Lua Package Manager (WLPM) 0.7-beta

Added by , published
Программы
Предназначение:
Работа с кодом

Больше не актуально

!!! WLPM УСТАРЕЛ - ТЕПЕРЬ ИСПОЛЬЗУЕМ IMP

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

0.6.1-beta

  • Исправлено подключение локальных файлов
38

0.7-beta

  • Поддержка выполнения команд (afterBuild)
  • Функция install ускорена, исправлена при выполнении из пустого проекта и при включении файлов
8
Похоже, я чего-то не понял, но когда я запускаю карту из редактора, все, что до этого добавилось в war3map.lua после команды WLPM build, все это исчезает.
38
build, после сохранения
а watch как раз этого ждет и снова ребилдит
8
ScorpioT1000, вот да, я, кажется, забыл watch прописать. И еще, я этого не нашел в руководстве, а сам не разбираюсь в подобном: карта может быть запущена в редакторе, и работа с кодом и в РО выполняются независимо?
38
Ну, там нехитрый механизм ожидания закрытия файла war3map.lua редактором. А редактор его трогает только при сохранении. Остальные файлы не касаются самой карты.
38
Latest news!
На хайве полезная дискуссия появилась, нужна ли стандартизация зависимостей, где упоминали WLPM. Считаю, что не нужна
38
Вмерджил PR от Newtonsoft.Json. Прикольно у них робот сам их создает.
11
D:\1.ToSaver\Warcraft_3\Maps\LuaTestMap\10.w3x>wlpm build
Locating Dependencies
  Locating wlpm-package.json ... parsing ... done.
Dependencies are OK
Rebuilding modules
  Code of WLPM Module Manager added to the header. To disable, set "insertModuleLoader" to false in your wlpm-package.json
  Building source D:\1.ToSaver\Warcraft_3\Maps\LuaTestMap\10.w3x\src\main.lua
  Building source D:\1.ToSaver\Warcraft_3\Maps\LuaTestMap\10.w3x\src\core\core.lua
  Building source D:\1.ToSaver\Warcraft_3\Maps\LuaTestMap\10.w3x\src\core\core.lua
Это нормально что он два раза прописывает код в карту?
Replies (9)
38
Koladik, а что в итоговом war3map.lua?
11
ScorpioT1000, да он там 2 раза и копирнул содержимое
lua
-- D:\1.ToSaver\Warcraft_3\Maps\LuaTestMap\10.w3x\src\main.lua
require "core_1"

function test()
    print(1)
end

-- D:\1.ToSaver\Warcraft_3\Maps\LuaTestMap\10.w3x\src\core\core_1.lua
function test2()

end

-- D:\1.ToSaver\Warcraft_3\Maps\LuaTestMap\10.w3x\src\core\core_2.lua
function test2()

end

-- D:\1.ToSaver\Warcraft_3\Maps\LuaTestMap\10.w3x\src\core\core_1.lua
function test2()

end

-- D:\1.ToSaver\Warcraft_3\Maps\LuaTestMap\10.w3x\src\core\core_2.lua
function test2()

end

А почему бы не добавить поддержку require("module") в менеджере пакетов?
38
Koladik, покажи свой wlpm-package.json
38
Koladik, я подозреваю, что лишнего прописано в sources, там обычно указывается только папка и он сам идет по всем lua файлам рекурсивно
11
{
  "title": "project",
  "dependencies": {},
  "sources": [
    "src"
  ],
  "insertModuleLoader": false,
  "sourceExtensions": "*.lua"
}
В том то и дело, что ничего особенного.
11
Koladik,
заметил еще, что если добавить еще подпапку, то ее вводов будет уже три
Структура папок src
D:.
|   main.lua
|   
\---core
    |   core_1.lua
    |   core_2.lua
    |   
    \---module
            module_1.lua
cmd
D:\1.ToSaver\Warcraft_3\Maps\LuaTestMap\10.w3x>wlpm build
Locating Dependencies
  Locating wlpm-package.json ... parsing ... done.
  Dependencies are OK
Rebuilding modules
Code of WLPM Module Manager is skipped according to your wlpm-package.json
  Building source D:\1.ToSaver\Warcraft_3\Maps\LuaTestMap\10.w3x\src\main.lua
  Building source D:\1.ToSaver\Warcraft_3\Maps\LuaTestMap\10.w3x\src\core\core_1.lua
  Building source D:\1.ToSaver\Warcraft_3\Maps\LuaTestMap\10.w3x\src\core\core_2.lua
  Building source D:\1.ToSaver\Warcraft_3\Maps\LuaTestMap\10.w3x\src\core\module\module_1.lua
  Building source D:\1.ToSaver\Warcraft_3\Maps\LuaTestMap\10.w3x\src\core\core_1.lua
  Building source D:\1.ToSaver\Warcraft_3\Maps\LuaTestMap\10.w3x\src\core\core_2.lua
  Building source D:\1.ToSaver\Warcraft_3\Maps\LuaTestMap\10.w3x\src\core\module\module_1.lua
  Building source D:\1.ToSaver\Warcraft_3\Maps\LuaTestMap\10.w3x\src\core\module\module_1.lua
версия 0.7-beta как тут
38
Koladik, через время буду смотреть, странно всё это, ну пока я так понимаю юзаешь cheapack
Спасибо за то, что нашел баг
11
ScorpioT1000, я 3 системы посмотрел, cheapack, этот и warcraft 3-vscode. Пока cheapack выглядит наиболее удобным с точки зрения портируемости. Например его можно на линуксе легко запустить. Но твой легче всего установить так как гайд наиболее понятный.
38
Koladik, вот пофикшу скоро и соберу для мака и линукса, этож дотнет кор)
А вот по менелжеру модулей думаю над luadoc, в теории там есть тоже шаблон T и можно строку в тип превращать
38
Latest news!

WLPM больше не поддерживается

Всем добро пожаловать в мир IMP
Commenting and likes are disabled on this resource. You can contact the author directly.