EvilBeaver / oscript-library

Библиотека полезных скриптов для 1Script
http://oscript.io/docs/page/libraries
Apache License 2.0
118 stars 46 forks source link

Ошибка подключения библиотек при использовании локальных путей #32

Closed nixel2007 closed 8 years ago

nixel2007 commented 9 years ago

Если в собственном скрипте сначала подключить asserts по локальному пути, а потом подключить по локальному пути любой модуль, где так же используется asserts, например,

#Использовать "libs/asserts"
#Использовать "libs/v8runner"

то при компиляции происходит ошибка вида

{Модуль C:\Program Files (x86)\OneScript\lib\asserts\package-loader.os / Ошибка в строке: 45 / Внешнее исключение: Symbol already defined in the scope}    
                    ДобавитьМодуль(ФайлКласса.ПолноеИмя, Идентификатор);

Протестировано на ветке develop, sha - 6a8aabacc0329891be8344358ec6d9bc96b83f4a На сколько я понял, проблема связана с тем, что в v8runner используется подключение asserts стандартным способом "по имени", через #Использовать asserts, и происходит конфликт имен классов/модулей.

Такая же проблема часто возникает с модулем logos.

Приходится исключать эти библиотеки из импорта, что может привести к ошибкам, так как в стандартном каталоге lib могут лежать неактуальные и/или конфликтующие версии подключаемых библиотек.

Возможно ли научить oscipt при подключении библиотек "по имени" проверять, подключена ли она (не важно, "по имени" или "по пути"), и если подключена, то использовать уже ее? (Ну, или радикальный вариант - не использовать подключение библиотек внутри стандартных библиотек)

Если это проблема самого oscript, могу перенести issue туда.

EvilBeaver commented 9 years ago

@nixel2007 Ошибка понятна, причина ошибки описана правильно, непонятна только мотивация. Для чего потребовалось подключать стандартную библиотеку по пути? Какой сценарий предполагался?

nixel2007 commented 9 years ago

Причины три: 1) максимизировать соответствие продакшн и дев окружения 2) однозначно зафиксировать используемую версию библиотек (так как используется дев-ветка, то стабильность и функционал каждой версии требуется проверять отдельно и только после этого сливать в master основного репо) 3) Упростить обновление используемой библиотеки на продакшн - используется submodule и git submodule update при деплое и тестировании на CI

EvilBeaver commented 9 years ago

Кажется, что обновлять продакшен с dev ветки, да еще и через git pull немного некошерно...

nixel2007 commented 9 years ago

Поэтому и используется не сама dev-ветка oscript-library, а конкретный коммит, установленный в submodule - оттестированный и с нужным функционалом.

EvilBeaver commented 8 years ago

Если это проблема самого oscript, могу перенести issue туда

@nixel2007 да, перенеси, туда, пожалуйста, я посмотрю.

nixel2007 commented 8 years ago

@EvilBeaver Сделано. https://bitbucket.org/EvilBeaver/1script/issues/201

EvilBeaver commented 8 years ago

Закрыто и перенесено в багтрекер 1Script.