Всем привет!
Предлагаю обсудить такую идею. Скрипты Снегопата удобно использовать в качестве "библиотек" функций, как альтернативу использования WSC.
По сравнению с WSC у них как минимум есть неоспоримое преимущество: их не надо регистрировать.
Но есть и существенный недостаток: если использовать их "как есть", все библиотечные функции на момент исполнения скрипта/макроса должны быть загружены (причем загружены до скриптов, которые их будут использовать). Сейчас это не проблема, но, вспоминая случай OpenConf'а, скоро Снегопат обрастет кучей различных скриптов и кучей библиотек, а соответственно получим уже знакомую историю: все скрипты будут загружаться во время запуска конфигуратора и тормозить его.
Предлагаю к рассмотрению вариант "динамической" подгрузки скриптов-библиотек (по требованию), которая может осуществляться как при старте того или иного скрипта, так и при вызове макроса (выбор остается на откуп разработчику макроса).
Также динамическая подгрузка библиотек избавляет нас от необходимости явным образом следить за порядком загрузки скриптов (чтобы не ломались зависимости от библиотек, когда скрипт загружается раньше библиотеки).
Для этого в stdlib.js (3_std.js) я добавил метод require(libFileName) и сделал незначительные правки в snegopat.js и snegopatwnd.js.
Измененные файлы из моего экспериментального бранча прилагаю (сделать push в мастер-репозиторий не могу в связи с отсутствием прав).
Пример использования:
Код:
$engine JScript
$uname TestRunner
$dname Менеджер юнит-тестов скриптов
$addin global
$addin stdlib
var jsUnit = stdlib.require("jsUnitCore.js");
В качестве параметра require() может быть передан либо полный путь к файлу скрипта, либо имя скрипта. В последнем случае скрипт-библиотека ищется в подкаталоге scripts/Libs каталога Снегопата.