Скрыто в документе

Что это за среда, о которой мы говорим?

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

Наиболее распространенная настройка среды:

Разработка: среда, в которой разработчики могут тестировать и возиться без последствий.

Staging: среда для тестирования и предварительного просмотра заинтересованными сторонами. Заинтересованным лицом может быть руководитель компании или инвестор, или кто-то еще, кто не участвует в активной разработке, но имеет «доли» внутри проекта.

Производство: среда для использования конечными пользователями. Должен быть максимально стабильным.

Есть ли в мини-программе WeChat эти среды?

Да, но с другими именами.

Разработка для разработки

Это среда внутри WeChat Devtool.

Пробная версия для подготовки

Это среда, когда код отправляется в Tencent как «бета-версия».

Выпуск для производства

Это среда, когда код утверждается Tencent и публикуется.

Но как?

Согласно документу, вы можете получить envVersion с помощью метода под названием wx.getAccountInfoSync().

Вот как это выглядит в синтаксисе деструктурирования.

const res = wx.getAccountInfoSync();
const { miniProgram: { envVersion }} = res;
// envVersion === 'develop' || 'trial' || 'release'

Когда вызывать этот метод?

Вы можете вызвать этот метод при запуске и сохранить envVersion в качестве глобальной переменной.

Или вы можете настроить файл config для обработки всех различных URL-адресов для ваших сред.

Вот пример config.js

// Default Global Values
let envChecked = false;
let environment = 'develop';
let apiUrl = 'https://dev.link.com';
// A function to check environment of mini-program
const checkEnv = () => {
  try {
   const res = wx.getAccountInfoSync();
   const { miniProgram: { envVersion }} = res;
   // If need to hardcode env, do it here
   environment = envVersion;
   envChecked = true;
   return environment;
  } catch (e) {
   // Do something when catch error
   console.error('error while getting env', e);
   return 'default';
  }
}

// Another function to get the proper URL for the environment
const getUrl = () => {
   if(!envChecked) {
    checkEnv();
   }
   switch (environment) {
     case 'develop':
      apiUrl = 'https://dev.link.com';
      break;
     case 'trial':
      apiUrl = 'https://staging.link.com';
      break;
     case 'release':
      apiUrl = 'https://prod.link.com';
      break;
     default:
      break;
   return apiUrl;
}
export {
  getUrl
};

При выполнении запроса импортируйте файл конфигурации и используйте getUrl как функцию.

Вы можете подумать, почему бы нам просто не экспортировать apiUrl и использовать это значение?

Проблема в том, что wx.getAccountInfoSync() требуется некоторое время для завершения выполнения. Если ваш запрос должен ждать его, это задержит начальное время запуска.

Вызов getUrl гарантирует, что мы проверили среду, но также позволяет избежать слишком большого количества вызовов wx.getAccountInfoSync.

Таким образом, при выполнении запроса в index.js он может выглядеть так:

import {
  getUrl
} from '../../utils/config';

// ... Page setup code 
// Make request within some function
const url = `${getUrl()}/users`;
const {
  data
} = await wxp.request({
  method: 'GET',
  url
})

Вывод

Если вы хотите узнать больше о разработке, связанной с WeChat, нажмите здесь.