@Fox этот способ не помогает.
df1d1ae0-d600-48e2-bd51-79d548d89a18-image.png
a9830dae-b2be-48d0-8f7f-6402862bf747-image.png
Nodejs
-
Не знаю это баг или так и должно быть но для новичков не очень удобно.
Сессия nodejs перезапускается если открыть действие "Node.js"
Например создаем глобальную переменную в одном из действий
Вызываем переменную с другого действия "Node.js" все работает как положено, стоит открыть редактор действия "Node.js" глобальная переменная пропадает приходится возвращаться в начала тестовый скрипт добавил.Это не удобно когда поэтапно проверяешь код nodejs на работоспособность и добавляешь новые функции в код, если бы можно было как то без обновлений отключить перезапуск было бы отлично или хотя бы сделать галочку перезапускать или нет при редактировании.

-
Не знаю это баг или так и должно быть но для новичков не очень удобно.
Сессия nodejs перезапускается если открыть действие "Node.js"
Например создаем глобальную переменную в одном из действий
Вызываем переменную с другого действия "Node.js" все работает как положено, стоит открыть редактор действия "Node.js" глобальная переменная пропадает приходится возвращаться в начала тестовый скрипт добавил.Это не удобно когда поэтапно проверяешь код nodejs на работоспособность и добавляешь новые функции в код, если бы можно было как то без обновлений отключить перезапуск было бы отлично или хотя бы сделать галочку перезапускать или нет при редактировании.
Глобальную переменную можно объявлять без записи её в объект global, просто объявите её без var
Я не так глубоко разбирал работу node и возможно где то не прав, по этому выскажу личное мнение:
Посмотрите код действия node js_embedded("z8hknrrabq", "Node", "8.6.0", "", 60000 )!первым аргументом функции _embedded является строка
"z8hknrrabq", это имя js файла хранящегося в директории\BrowserAutomationStudio\apps\22.6.5\embedded\*ХЕШ*\distr\lib\custom\
В этом файле и содержится код действия node js. Именно по этому и не работает копирование кубика в другой проект, само действие пытается открыть файл, а его может не быть в другом проекте. В коде проекта информация о файлах и коде в них содержится в теге <EmbeddedData>:
<EmbeddedData><![CDATA[[{"data":"global.qqq = 'Видит глобальную переменную'\r\nglobal.www = 'Не видит глобальную переменную после редактирования действия'","data_name":"z8hknrrabq","data_type":0,"language_name":"Node","language_version":"8.6.0"},{"data":"console.log(qqq)","data_name":"fz0xjv06rgv","data_type":0,"language_name":"Node","language_version":"8.6.0"},{"data":"console.log(www)","data_name":"gnbqh7ssqlb","data_type":0,"language_name":"Node","language_version":"8.6.0"}]]]></EmbeddedData>BAS запускает один инстанс node для всех потоков и выполняет код действий node в нём. Во избежание ошибок и конфликтов при открытии и множественном редактировании действия и происходит сброс node. Изменение этого алгоритма и добавление опций для отключения сброса повлечёт за собой пачку вопросов от пользователей, почему у них не работают модули и их код постоянно выдаёт ошибки.
-
@Fox _embedded("z8hknrrabq", "Node", "8.6.0", "", 60000 )!
если бы во время работы можно было бы хотя бы редактировать файл z8hknrrabq
то проблем не возникло бы
после редактирования кода через BAS обновляет этот файл z8hknrrabq и код сохраняет у себя в буфере ручное редактирование этого файла ничего не меняет -
@Fox _embedded("z8hknrrabq", "Node", "8.6.0", "", 60000 )!
если бы во время работы можно было бы хотя бы редактировать файл z8hknrrabq
то проблем не возникло бы
после редактирования кода через BAS обновляет этот файл z8hknrrabq и код сохраняет у себя в буфере ручное редактирование этого файла ничего не меняетПродублирую здесь ответ @support
Процесс с node.js полностью перезапускается при любом изменении кода так сделано специально, чтобы избежать ошибок вроде "код закешировался и не изменился после обновления".и
Рекомендуется избавиться от использования глобальных переменных вообще. -
А есть возможность выполнять скрипт из файла js
чтобы читал файл и выполнялconst fs = require("fs"); let fileContent = fs.readFileSync("C:/index.txt", "utf8"); eval(fileContent);такой код выдает ошибку если код содержит console.log или [[VARIABLE]] так же вроде еще некоторые коды
-
такой код выдает ошибку если код содержит console.log или [[VARIABLE]] так же вроде еще некоторые коды
Метод eval() выполняет JavaScript код, представленный строкой. Далеко не всё api BAS этот метод сможет выполнить.
Для определения переменной BAS через eval() нужно записывать их с приставкой VAR_eval("VAR_HELLO = 'hello'")тестовый скрипт
-
@Fox да все верно так же там console.log пишется как BAS_CONSOLE_LOG примерно так
console.log выводит информацию в node, а не в BAS. Что бы увидеть информацию в логе BAS и происходит замена
а есть альтернатива eval чтоб обработал весь файл?
В BAS нет готового метода, который выполнил бы код с api BAS представленный строкой. Самое близкое по смыслу:
https://community.bablosoft.com/topic/10824/поддержка-javascript-правильно-добавить/15 -
В BAS нет готового метода, который выполнил бы код с api BAS представленный строкой. Самое близкое по смыслу:
https://community.bablosoft.com/topic/10824/поддержка-javascript-правильно-добавить/15а есть возможность подключить файл js типо как модуль но чтоб при выполнение без перезапуска сессии выполнял код из js
-
В BAS нет готового метода, который выполнил бы код с api BAS представленный строкой. Самое близкое по смыслу:
https://community.bablosoft.com/topic/10824/поддержка-javascript-правильно-добавить/15а есть возможность подключить файл js типо как модуль но чтоб при выполнение без перезапуска сессии выполнял код из js
Чегось?
-
@Fox например есть файл C:/index.js как мне выполнить содержимый код из этого файла в Node.js
вот как на скриншоте только не встроенный файл а отдельный чтобы он не кешировался басомДля выполнения кода с api BAS из файла я скидывал ссылку выше, для остального подойдёт простой eval(). Получайте строку любым удобным для вас способом и выполняйте его через eval().
