2017-02-17 17 views
9

Я использую сервер сборки для создания моих проектов Vue, используя команду , красиво поставляемую шаблоном Vue 2. Шаблон Vue также предоставляет возможность доступа к данным, зависящим от среды, которые могут быть настроены в файлах под каталогом config. Такие вещи, как prod.env.js и т. Д. Затем вы получаете доступ к этим данным через process.env.API_PREFIX, как видно из руководства по шаблону.Независимые от среды сборки с использованием шаблона веб-пакета Vue

Я хочу, чтобы иметь возможность построить код один раз, затем развернуть ту же сборку (как определено выходом в Dist) на несколько серверов, но разные серверы используют другую конфигурацию (разные API_PREFIX и т. Д.). В настоящее время ссылки process.env расширяются во время сборки компилятором Webpack. Поэтому я должен перестраиваться для каждой среды.

Я могу придумать несколько способов сделать это - очевидно, что загрузка конфигурации должна произойти во время выполнения, и, учитывая, что она запускается в браузере и должна ссылаться на какой-то файл, она должна быть выполнена запрос AJAX для некоторой статической конфигурации JSON, обслуживаемой веб-сервером отдельно или аналогичным. Но мне было бы интересно узнать, как кто-то здесь справится с этим требованием.

+1

Есть несколько трюков, но вам нужна дополнительная информация о том, как вы определяете API_PREFIX. Связано ли это с доменом, в котором приложение будет доступно? Можете ли вы привести конкретные примеры? – aristidesfl

+0

Да, префикс API является примером данных конфигурации, характерных для каждой среды. Это будет другой домен для каждой среды развертывания. Например, в сборке для среды развертывания «промежуточная» префикс API может быть «https: // staging-api.mycompany.com». [это не выводится в принципе из названия среды.] – amoe

ответ

2

Не зная вашей конкретной архитектуры, сложно дать конкретные советы. Вместо этого я оставлю несколько общих идей.

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

Есть несколько вещей, которые вы можете использовать для этого, помимо использования window.location во время выполнения:

  • относительные пути /api/myinformation - префикс будет автоматически выводятся из области, где оболочка подается в.
  • Локальный прокси во время разработки, так как вы не можете запустить бэкенд на локальном хосте https://github.com/vuejs-templates/webpack/blob/master/docs/proxy.md
  • Proxy переписывают путь на Nginx или аналогичный: https://stackoverflow.com/a/3017720/1445812

Даже если это не поможет решить конкретный случай, надежда это дает вам представление о том, что доступно.

+0

Мой вопрос не в том, что касается префикса API, который является всего лишь случайным примером части конфигурации, которую я хочу параметризовать после процесса сборки. У меня есть много других вещей, которые относятся к среде развертывания, не связанной с префиксом. Мне нужен общий способ чтения переменных конфигурации во время выполнения. – amoe

+1

Вопрос в том, где, когда и как вы хотите их написать. Исходя из каких критериев. Без более конкретного описания usecase трудно дать более конкретные идеи. – aristidesfl

+0

Я думаю, что я решил сделать это, используя внешние Webpack, глобальный тег скрипта и файл в каталоге 'static', который определяет конфигурацию на объекте' window'. Это оценивается во время выполнения, но все же помещается в контекст webpack таким образом, что синхронно. – amoe