Как я могу предоставить URL-адрес api для моей библиотеки, которая запускается через браузер после сборки и минимизации с помощью webpack? - PullRequest
1 голос
/ 18 июня 2020

У меня есть проект JavaScript, который создает виджет, используемый сторонними веб-сайтами, и использует мой API. Библиотека настроена с помощью JavaScript имен файлов config.js:

api_url="https://example.com";

module.exports={
  'api_url': api_url
};

Я хочу заменить api_url в зависимости от среды сборки на соответствующий URL-адрес. Ты хоть представляешь, как это сделать?

Если я использую env.NODE_ENV или переменные среды, они будут доступны, только если JavaScript выполняется Nodejs. Следовательно, для сборки браузера JS - это не go для меня. Я хочу иметь возможность построить свой JavaScript со значениями, которые будут жестко закодированы в зависимости от среды в соответствующие переменные.

Что мне действительно нужно, так это мой API, который будет создан для исполняемого браузера javascript.

1 Ответ

0 голосов
/ 22 июня 2020

Хороший подход состоит в том, чтобы config.js генерировалось через webpack или gulp. В моем случае я использую инструмент gulp для автоматического создания своего. Gulp получает доступ к соответствующим переменным окружения из переменной окружения конвейера и заполняет соответствующие значения в config. js:

var fs = require('fs');
var webpack = require('webpack-stream');

gulp.task('build',function(){
   const url !!process.env.API_URL?process.env.API_URL:'http://example.com';
   const environmentString=`/* Generated at ${Date.now().toString()} */\nmodule.exports = { api_url:"${url}" };`
   fs.writeFileSync('./config.js',environmentString);

   // Rest of build here
});

Аналогичный подход можно использовать и в случае использования веб-пакета. В случае, если config.js вычисляет некоторые поля конфигурации (например, URL-адрес, такой как SENTRY DSN), просто создайте еще один javascript файл с именем environment.js и заполните его только переменными среды.

...