Ошибка пакетов NPM из-за веб-пакета - PullRequest
0 голосов
/ 18 июня 2019

Я создал сайт Netlify, на котором выполняется проект create-реагировать на приложение и используется функция лямбда-функций Netlify.Однако, когда я пытаюсь использовать такие пакеты, как mysql или mysql2, я получаю ошибки webpack.Они были задокументированы по проблемам github для каждой библиотеки, но у меня нет доступа к конфигурации веб-пакета, чтобы добавить «быстрое исправление».Я не могу себе представить, что я единственная, кто сталкивается с этой проблемой, но какие у меня есть варианты?

Есть ли способ предотвратить соприкосновение веб-пакетов с моими серверными пакетами?Это происходит из-за того, что Netlify хранит как клиентский, так и серверный код в одном и том же корневом каталоге?

Я исчерпал практически все варианты, которые мог придумать за последние пару дней.Любые рекомендации или идеи будут с благодарностью.

1 Ответ

0 голосов
/ 19 июня 2019

Итак, существует несколько способов развертывания лямбда-функций Netlify. Имейте в виду, что лямбда-функции - это просто модули узлов, которые экспортируют обработчик. После сборки Netlify будет использовать значение функции при сборке в netlify.toml, чтобы получить каталог для развертывания ваших функций.

Распространенные способы создания этих функций

  • Использование Netlify Cli (netlify-cli) с терминала.
  • Во время CI / CD используйте netlify-lambda cli, чтобы связать функции из источника расположение в папке, указанной в вашем netlify.toml под build.functions. Это позволяет подготовить их к развертыванию с базовой настройкой webpack / Babel для современного Javascript.
  • Не выполняйте предварительную обработку, а просто поместите свои функции непосредственно в каталог, указанный в netlify.toml в build.functions.

Последний вариант - это тот, который вы, вероятно, хотите использовать в этом случае.

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

netlify.toml

[build]
  functions = "functions"

/functions/somefunction/somefunction.js

var mysql = require('mysql');
.
.
exports.handler = (event, context) => {
 .
 .
}
.

Создайте файл /functions/somefunction/package.json с необходимыми зависимостями. В этом случае вы будете использовать mysql и любые другие, которые вам требуются в ваших функциях. Также следует использовать файл package-lock.json, чтобы заблокировать нужную версию.

В вашем корневом package.json установите команду сценария предварительной обработки на cd ./functions/somefunction && npm install, чтобы установить зависимости перед любыми командами сборки. Это объединит зависимости в /functions/somefunction/node_modules и будет готово для развертывания netlify вместе с вашей функцией somefunction. Команда pre-process позволит вам оставить node_modules из вашего репозитория git.

Вот пример create-react-app с функциями netlify , который использует метод, описанный выше, где функции не связаны с помощью веб-пакета или netlify-lambda, но имеют зависимости, которые предварительно устанавливаются во время сборки до развертывания. В этом примере используется подкаталог для функции joke-async.

...