Простое управление пакетами и модулями для приложений, написанных на Lua, AngelScript и других языках с динамической типизацией.
Добавляет в ваш проект управление пакетами и es6-like модули Lua без copy-paste боли и dependency ада.
Может включать удаленные зависимости AngelScript.
Может включать удаленные зависимости AngelScript.
Возможности
IMP состоит из менеджера пакетов и менеджера модулей с собственной частью кода Lua.
Новый способ загрузки пакетов: команда imp
Новый способ работы с зависимостями lua: IMP Module Manager📡
Lazy-loading модули с инспекцией кода через LuaLS или EmmyLua!
Ни один параметр не спрячется от ваших.точечек :)
Новый способ работы с зависимостями lua: IMP Module Manager📡
Lazy-loading модули с инспекцией кода через LuaLS или EmmyLua!
Ни один параметр не спрячется от ваших.точечек :)
Пример написания модульного кода
-- файл 1
Hello = Imp.export("Hello", function()
-- пишите любой инит код здесь, он исполнится один раз
-- экспортируем модуль (ваши данные и функции или пустой table)
return {
foo = "bar",
welcome = function() print "Hello world!" end
}
end)
-- файл 2
World = Imp.export("World", function()
-- импортируем модули
local Hello = Imp.import(Hello)
-- пишите любой инит код здесь, он исполнится один раз
Hello.welcome()
-- экспортируем модуль (ваши данные и функции или пустой table)
return {}
end)
-- инит секция (main)
local World = Imp.import(World)
Результат:
Hello world!
Подробнее про модули и как разрешаются конфликты одинаковых имен модулей: github.com/Indaxia/imp-lua-mm
Возможности Менеджера Пакетов:
- Работает с оффлайн каталогами и онлайн репозиториями
- Собственный формат конфигурации пакета в JSON
- Установка пакетов с зависимостями из Github и Bitbucket
- Установка отдельных файлов напрямую из Github, Bitbucket или других хостов (разрешение их в конфигурации)
- Вотчер за файлами и каталогами (исходники, конфиг, целевой файл) - билдим на лету!
- Разрешает версионность зависимостей
- Настройте форматы для других языков и отвяжитесь от lua
Возможности Менеджера Модулей Lua:
- Включайте свои доп. директории как дополнительные исходники
- Верный порядок зависимостей в целевом файле
- ES6-like импорты и экспорты в Lua скрипте
- AngelScript #include ваших и удаленных пакетов
- Реально быстрый билдер целевого файла на ходу (C# watcher)
Быстрый старт
- Установите IMP
- Для моддинга игр (особенно Warcraft 3 Reforged следуйте специальным шагам)
- (для Linux) создайте симлинк /usr/bin/imp -> (папка imp)/imp
- Откройте любой терминал (нажать Win+R и ввести "cmd")
- Введите cd <папка вашего проекта>
- Введите imp init src build.lua где src может быть любой папкой исходников в вашем проекте
- Для AngelScript введите imp init src main.as packages де src может быть любой папкой исходников в вашем проекте для авто-include файлов
- imp watch и теперь можно писать код и билдить на ходу!
Для инициализации пакета введите imp init build.lua. Эта команда создаст imp-package.json и .imp папку с зависимостями. Если используете git (mercurial/svn/...), добавьте .imp в игнор файл (.gitignore).
Для добавления нового пакета в зависимости ввести imp install <пакет> <версия - опционально>
Быстрый старт для моддинга Warcraft 3 / других игр
- создать папку проекта с подпапкой "src" или любой другой (заменить src на нее)
- сохранить вашу карту в режиме "карта как директория" внутрь папки проекта
- Откройте любой терминал (нажать Win+R и ввести "cmd")
- Введите cd <папка вашего проекта>
- Введите imp init src папка-карты.w3x/war3map.lua
- Установите все зависимости, которые вам нужны
- imp watch
Теперь создавайте свои файлы в "src" или сохраняйте вашу карту для сборки и тестирования её на ходу.
Использование imp watch позволяет уведомлять PM и MM, если что-то изменилось и производить скачивание новых пакетов и/или пересобирать модули. Вотчер ожидает изменения одного из следующих:
- любая директория из пункта конфига "sources"
- файл из пункта конфига "target"
- самого файла конфига
Расширенные возможности
Включение файлов
Вы можете включать файлы напрямую (в примере Big Integer):
imp install https://raw.githubusercontent.com/DeBos99/lua-bigint/master/bigint.lua * file
Чистый init
Если вы не хотите использовать MM на стороне клиента (Lua), вы можете отключить его, удалив из зависимостей, или инициализировать проект с помощью init-clean:
imp init-clean target.lua
При использовании этой опции IMP просто включает код зависимостей без MM.
Выполнение команды до/после сборки
До и после завершения процесса сборки можно выполнить команду терминала:
"beforeBuild": "cmd /C echo \"BEFORE BUILD!\"",
"afterBuild": "cmd /C echo \"AFTER BUILD!\" ",
Также можно добавить подстановку, чтобы заменить её именем целевого файла:
"beforeBuild": "cmd /C echo \"BEFORE BUILD! The target file is: %target%\"",
"afterBuild": "cmd /C echo \"AFTER BUILD! The target file is: %target%\" ",
Результат будет чем-то типа:
"BEFORE BUILD! The target file is: C:\Local\My project\build.lua"
...
"AFTER BUILD! The target file is: C:\Local\My project\build.lua"
Это работает только для корневых проектов.
Добавление дополнительных вотчеров
Чтобы триггернуть пересборку по изменению каких-нибудь других файлов вне src/target, добавьте их в раздел "watchExtra":
"watchExtra": [
"my extra file 1.w3n",
"my extra file 2.w3x",
]
Публикация пакетов
Если вы хотите опубликовать свой пакет, выполните следующие действия:
- Создайте репозиторий git на Github или Bitbucket.
- Создайте imp-package.json в корне репозитория.
- Добавьте параметры "dependencies" и "sources". См. полный пример конфигурации ниже.
- (необязательно) добавьте git tag в репозитории (версию типа 0.1)
Для лучшего понимания изучайте структуру imp-demo.
Пример полного конфига
{
{
"title": "IMP - Demo Package", // (optional) your package or root project title
"language": "lua", // (optional) your package language
"author": "ScorpioT1000 / scorpiot1000@yandex.ru", // (optional) author information
"license": "MIT", // (optional) source code license
"dependencies": { // list of packages and files required by your source code
// github repository from a master branch
"https://github.com/123/456": "*",
// github repository from the release tagged as "1.1.1"
"https://github.com/123/456": "1.1.1",
// bitbucket repository from the release tagged as "1.0.0" in an object format
"https://bitbucket.org/123/789": { "type": "package", "version": "1.0.0" },
// inserts a file directly from the repository
"https://github.com/123/456/blob/master/somefile.lua": {
"type": "file",
"topOrder": true // omit this option or set to false to insert the file after repositories' sources
}
},
// (optional for root project) where your sources are stored. It's important for the package, but can be omitted for root project (it watches "target")
"sources": [
"src"
],
// (optional) where to store compiled build. It works for root project only. You can specify different extension for another language
"target": "build.lua",
// (required for AngelScript dependencies) your main file to include in the dependant projects
"entryPoint": "main.as",
// (optional) your remote packages folder (default is ".imp/packages")
"packages": "my/packages",
// (optional) extra file list to trigger rebuild on their change (one relative file name per element)
"watchExtra": [],
// (optional) execute this command before build, e.g. "cmd /C echo \"Hello!\"". Placeholders available: %target%
"beforeBuild": "",
// (optional) execute this command after build, e.g. "cmd /C echo \"Hello!\"". Placeholders available: %target%
"afterBuild": "",
// (optional) allow more hosts for direct file dependency (allows github.com and bitbucket.org by default). It works for root project only.
"allowHosts": []
// (optional) set custom file extensions to use another language (e.g. "*.js")
"sourceExtensions": "*.lua",
}
}
Ограничения
- Не поддерживает частичную подстановку версий типа 1.*, т.к. не использует реестр пакетов.
- Выполняет полную повторную загрузку при любом изменении зависимостей в конфиге.
Как собрать из исходников
Склонировать github.com/Indaxia/imp
Выполнить:
Выполнить:
dotnet publish -c Release --self-contained --runtime win-x64 /property:Version=ВАША_ВЕРСИЯ
dotnet publish -c Release --self-contained --runtime linux-x64 /property:Version=ВАША_ВЕРСИЯ
Затем использовать Inno Setup для Windows и открыть с его помощью Setup\win-x64.iss, для создания установочного файла.
P.S. Какой такой WLPM? Не было такого...
Ред. ScorpioT1000
Нам просто нужны мини утилиты для этих целей и сделать отдельно обвешанный сборщик
Ред. ScorpioT1000
Версия 1.1
Ред. ScorpioT1000
Версия 1.2
Рабочий конфиг для AngelScript
Во что это собирается
Рабочий конфиг пакета для AngelScript