Рубрики
Без рубрики

Как я исправил проблему в Firebase CLI

Я нашел проблему на Firebase Cli Repo, на которой я мог работать. Проблема включала жесткодируемое Node.js … Теги с Opensource, Firebase, JavaScript.

Я нашел проблему на Firebase Cli Repo что я мог работать дальше. Выпуск Вовлечена Hardcoded Node.js версия в сгенерированном package.json файл, когда команда Функции init firebase выполняется. Более того, не было предупреждения, когда в использовании Node.js используется версия Node.js устарена в функциях облачных Google.

Начиная

Если честно, я понятия не имел, как сначала подойдет к этому вопросу, поэтому я решил следовать послужению гида. Это было очень подробно и просто, поэтому у меня не было проблем с настройками Firebase-Tools Отказ В отличие от предыдущих проектов с открытым исходным кодом, я должен был подписать Google Участник лицензионного соглашения (CLA), прежде чем я смогу внести свой вклад в Firebase CLI. Благодаря интуитивно понятной структуре папки проекта я могу определить, какие файлы будут изменены.

Динамически установлена версия узла

На основании структуры папки Функции init firebase должен выполнить код внутри Firebase-Tools/SRC/INIT/Особенности/Функции/<Язык> .js ( <Язык> – это язык программирования, выбранный для вашего проекта). Я сделал Комментарий по вопросу, чтобы обсудить мой подход. К счастью, у меня есть несколько супер полезных рекомендаций Даниэль , автор вопроса.

В основном, package.json Файл генерируется из предварительно написанного шаблона. Чтобы установить правильную версию Node.js, мне нужна логика, чтобы идентифицировать ее и заменить жесткозедированную версию динамически.

Во-первых, я заменил жесткодируемую версию с шаблонной строкой внутри package.json Файл шаблона:

  "engines": {
    "node": "{{NODE_VERSION}}"
  },

Затем была реализована надежная функция для обнаружения версии Node.js:

export function getNodeVersionString(): string {
  return process.versions.node.split(".")[0];
}

Наконец, прежде чем писать package.json Файл на машину Dev, мне просто нужно заменить строку шаблона с обнаруженной версией Node.js, как это:

const nodeEngineVersion = getNodeVersionString();
if (useLint) {
    return PACKAGE_LINTING_TEMPLATE.replace(/{{NODE_VERSION}}/g, nodeEngineVersion);
  }
return PACKAGE_NO_LINTING_TEMPLATE.replace(/{{NODE_VERSION}}/g, nodeEngineVersion);
  • Package_linting_template : содержание package.json Файл с Eslint.
  • Package_no_linting_template : содержание package.json Файл без Eslint.

Обрабатывать устаренные версии узла

Логика для предупреждения разработчиков устаревших версий Node.js все еще пропала, поэтому я обсуждал Мой подход С Даниилом снова. Я намеревался использовать функцию, которую я нашел в их кодовой базе, isdeprecatedruntime () , чтобы выполнить чек.

К счастью, Даниэль уступил небольшой ошибку в моем подходе и предложил лучшего, который должен был использовать ISVALDRUNTIME () вместо. Я наконец получил последнюю часть как:

if (!isValidRuntime(`nodejs${nodeEngineVersion}`)) {
    utils.logWarning(`Node ${nodeEngineVersion} is no longer supported in Google Cloud Functions.`);
    utils.logWarning(
      "See https://firebase.google.com/docs/functions/manage-functions for more details"
    );
}

Последние мысли

Мне никогда не пришлось исправить свой код для PR так же, как этот. Благодаря своему обзору кода я узнал несколько хороших практик вместе с тем, как я могу избежать подводных камней, обсудив мой подход и получая обратную связь, прежде чем на самом деле кодировать его.

Выпуск: https://github.com/firebase/firebase-tools/issues/3407 PR: https://github.com/firebase/firebase-tools/pull/3894. Firebase: https://firebase.google.com.

Оригинал: “https://dev.to/oliverpham/how-i-fixed-an-issue-in-firebase-cli-4i41”