Здравствуйте, адаптирую ваш код (Бот обратной связи без хостинга: Google Apps Script + Telegram Bot API), требуется разбить его на несколько файлов. Использую import/export, редактор ругается на "new WebHook", подскажите как правильно написать конструкцию кода, что бы избавиться от ошибки и не потерять функциональность?
// class.js
export default class WebHok {
.....
}
// doPost.js
import WebHook from './class';
function doPost(request) {
const update = JSON.parse(request.postData.contents);
new WebHook(update);
}
// Если сделать вот так
const wh = new WebHook(update);
return wh;
// код будет работать?
Откройте по ссылке или QR бот @iMakeBot, нажмите кнопку Старт/Start.
Следуйте инструкциям бота.
Когда я только начал изучать Google Apps Script, то конечно же хотелось делать это по современному. Использование import/export вроде как современный подход, но только не в этот раз.
Насколько я понял этот функционал вырезан из этой платформы.
Я много искал инфы в инете, и многие "гуру" указывали на то, что это там не работает.
При развертывании проекта, сборщик Google собирает по своему алгоритму в один файл и его отрабатывает при запросе.
Алгоритм как я понял собирает файлы строго в очереди установленной расположением файлов в левом окне его редактора.
Их можно расположить в алфавитном порядке или передвигать через контекстное меню между собой вверх или вниз.
От того в каком очередном порядке будет расположен файл зависит доступность его функционала, то есть если функция или переменная вызывается раньше чем она объявлена то будет исключение
Undefined
Для того, чтобы файлы были расположены в нужном порядке я их называл по алфавиту, для того чтобы было удобно строить приложение, а для статьи собирал уже в один файл, и потом еще пропускал через минификатор.
Я использую для сборки пректа webpack с модулем babel который преобразует es6 в es5 а так же плагин gas-webpack, такая связка позволяет писать современный код и без проблем скармливать его в GAS, поэтому был бы Вам очень благодарен если бы вы помогли написать ваш код на современном синтаксисе...
Приложите package.json и настройки webpack, я попробую воспроизвести окружение и примеры затестить
Для разработки и сборки GAS я использую стартовый шаблон https://github.com/labnol/apps-script-starter
Спасибо. Попробовал этот инструмент, было интересно, при первой сборке более 250 ошибок от ESLint )))
Исправил, все работает.
Ссылка на архив с директорией src и файлом appsscript.json
Ругается на const webhook = new WebHook(update); в index.js
WARNING in [eslint]
13:11 warning 'webhook' is assigned a value but never used no-unused-vars
✖ 1 problem (0 errors, 1 warning)
Да есть такой варнинг, в соседней ветке о нем упомянул, его можно обойти - переписать на статичный метод.
Или его можно игнорировать, так как на производительность никак не влияет.
Не смотря на предупреждение линтера, код работает...
Благодарю, Вас за помощь...
Настройки ESLint выдают исключение
no-new
, в данном примере получается, что объект создается, но не присваивается ни в какую переменную, в идеале было бы так:Если переменная
webHook
далее по коду использоваться не будет то ESLint выдаст warningno-unused-vars
Можно конечно заморочиться и сделать у класса WebHook какой-нибудь статичный метод
run()
, в котором бы и шла вся обработка запроса, тогда можно было бы вызвать его так:А если
const webhook = new WebHook(update);
webhook(); ?
ошибка снимается и вроде все работает...
я только изучаю js, может это как то повлияет отрицательно?
Странное поведение конечно, может в ES6 это можно (в исключительных случаях), но лучше по другому сделать: