Переменные окружения Nuxt, отображаемые в клиенте при загрузке в Zeit / Now - PullRequest
1 голос
/ 10 октября 2019

Я развертываю приложение Nuxt с Zeit / Now. На этапе разработки я использовал файл .env для хранения секретов в моей Contentful CMS, открывая секреты для process.env с помощью пакета nuxt-dotenv. Чтобы сделать это, в верхней части nuxt.config я звонил require('dotenv').config().

. Затем я сохранил секреты с помощью Zeit / Now и создал now.json, чтобы настроить их для сборки и выполнения следующим образом. :

{
    "env": {
        "DEMO_ID": "@demo_id"
    },
    "build": {
        "env": {
          "DEMO_ID": "@demo_id"
        }
    }
}

При такой настройке сборка работала только для страницы индекса, и весь Javascript не работал. Только когда я добавил env-свойство в файл nuxt.config.js, приложение начало работать правильно на Zeit-сервере.

require('dotenv').config()

export default {
...
env: {
   DEMO_ID: process.env.DEMO_ID
  },
...
  modules: [
    '@nuxtjs/dotenv'
  ],
...
}

НО: когда я тогда проверил загруженные файлы Javascript, мои секреты были раскрыты, чего я явно не хочу.

Что я здесь не так делаю? Спасибо за вашу помощь.

1 Ответ

1 голос
/ 10 октября 2019

Вы не обязательно делаете здесь что-то не так, просто работает Nuxtjs. Переменные, объявленные в свойстве env, используются для замены экземпляров process.env.MY_ENV, но поскольку Nuxt изомоморфен, это может быть как на сервере, так и client .

. секреты, доступные только на сервере, тогда самый простой способ решить эту проблему - использовать serverMiddleware.

Поскольку serverMiddleware отделен от основной сборки Nuxt, определены переменные envв nuxt.config.js там нет.

Это означает, что ваши обычные переменные ENV должны быть доступны, так как промежуточное программное обеспечение сервера работает на узле.

Очевидно, это означает, что этисекреты не будут доступны на стороне клиента, но это работает, если у вас есть что-то вроде секретного ключа Stripe, с которым вам нужно делать бэкэнд-запросы.

...