← Вернуться к списку тем

Не верный синтаксис

Здравствуйте, адаптирую ваш код (Бот обратной связи без хостинга: 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;

// код будет работать?

Авторизуйтесь через Telegram, чтобы оставить комментарий.
Откройте по ссылке или QR бот @iMakeBot, нажмите кнопку Старт/Start.
Следуйте инструкциям бота.

  • iMakeBots [1 год назад]

    Когда я только начал изучать Google Apps Script, то конечно же хотелось делать это по современному. Использование import/export вроде как современный подход, но только не в этот раз. 

    Насколько я понял этот функционал вырезан из этой платформы.

    Я много искал инфы в инете, и многие "гуру" указывали на то, что это там не работает.

    При развертывании проекта, сборщик Google собирает по своему алгоритму в один файл и его отрабатывает при запросе.

    Алгоритм как я понял собирает файлы строго в очереди установленной расположением файлов в левом окне его редактора.

    Их можно расположить в алфавитном порядке или передвигать через контекстное меню между собой вверх или вниз.

    От того в каком очередном порядке будет расположен файл зависит доступность его функционала, то есть если функция или переменная вызывается раньше чем она объявлена то будет исключение Undefined

    Для того, чтобы файлы были расположены в нужном порядке я их называл по алфавиту, для того чтобы было удобно строить приложение, а для статьи собирал уже в один файл, и потом еще пропускал через минификатор.

  • AGM 33rus [1 год назад → iMakeBots]

    Я использую для сборки пректа webpack с модулем babel который преобразует es6 в es5  а так же плагин gas-webpack, такая связка позволяет писать современный код и без проблем скармливать его в GAS, поэтому был бы Вам очень благодарен если бы вы помогли написать ваш код на современном синтаксисе...

  • iMakeBots [1 год назад → AGM 33rus]

    Приложите package.json и настройки webpack, я попробую воспроизвести окружение и примеры затестить

  • AGM 33rus [1 год назад → iMakeBots]

    Для разработки и сборки GAS я использую стартовый шаблон https://github.com/labnol/apps-script-starter

  • iMakeBots [1 год назад → AGM 33rus]

    Спасибо. Попробовал этот инструмент, было интересно, при первой сборке более 250 ошибок от ESLint )))

    Исправил, все работает. 

    Ссылка на архив с директорией src и файлом appsscript.json

  • AGM 33rus [1 год назад → iMakeBots]

    Ругается на 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)

  • iMakeBots [1 год назад → AGM 33rus]

    Да есть такой варнинг, в соседней ветке о нем упомянул, его можно обойти - переписать на статичный метод.

    Или его можно игнорировать, так как на производительность никак не влияет.

  • AGM 33rus [1 год назад → iMakeBots]

    Не смотря на предупреждение линтера, код работает...

    Благодарю, Вас за помощь...

  • iMakeBots [1 год назад]

    Настройки ESLint выдают исключение no-new, в данном примере получается, что объект создается, но не присваивается ни в какую переменную, в идеале было бы так:

    const webHook = new WebHook(update);

    Если переменная webHook далее по коду использоваться не будет то ESLint выдаст warning no-unused-vars  

    'webHook' is assigned a value but never used

    Можно конечно заморочиться и сделать у класса WebHook какой-нибудь статичный метод run(), в котором бы и шла вся обработка запроса, тогда можно было бы вызвать его так:

    WebHook.run(update)
  • AGM 33rus [1 год назад → iMakeBots]

    А если

    const webhook = new WebHook(update);

    webhook();  ?

    ошибка снимается и вроде все работает...

    я только изучаю js, может это как то повлияет отрицательно?

  • iMakeBots [1 год назад → AGM 33rus]

    Странное поведение конечно, может в ES6 это можно (в исключительных случаях), но лучше по другому сделать:

    // класс
    class WebHook() {
        // конструктор класса
        constructor(args) {
            // записываем переданные настройки
            this.args = { ...args };
        }
        // статический метод
        static new_(args) {
            // создадим и вернем объект класса 
            return new this(args);
        }
        // метод вывода
        print() {
            // выведем в консоль переменную
            console.log(this.args.botName);
        }
    }
    // вызов
    WebHook().new_({botName: "Hello Bot"}).print();