Добавить пользовательский этап сборки / подготовки к проекту - PullRequest
1 голос
/ 09 июня 2019

У меня есть ионное приложение, ориентированное на Android и iOS.

То, чего я хочу достичь, но я не уверен, как это сделать, - возможность указать флаг командной строки при сборке / подготовке кодадля обеих платформ.Моей первой целью было бы заменить ресурс другим - в данном случае изображением - используемым только для тестовых версий (например, заменить значок выпуска на значок бета-версии).

Как это сделать?И возможно ли даже использование ionic build/prepare?

1 Ответ

1 голос
/ 11 июня 2019

Используя Ионные Крючки (kudos @sebaferreras) Мне удалось заставить его работать следующим образом:

  1. Добавить крючки в ionic.config.json:

    "hooks": { "build:before": "./scripts/build-before.js", "serve:before": "./scripts/serve-before.js" }

  2. Создание сценариев и ресурсов для подключения.(Например, простой скрипт для ionic build - без проверок, для простоты:

module.exports = function(ctx)
{
  // Use console.log(ctx); to print the context to the console when running 'ionic build/serve'

  const projectDir = ctx.project.dir;

  if(isDevBuild(ctx))
  {
    useDevelopmentImage(projectDir);
    console.log('Using development logo.');
  }
  else
  {
    useProductionImage(projectDir);
    console.log('Using production logo.');
  }
};

function isDevBuild(context)
{
  if(context.build.prod)
    return false;

  return true;
}

function useDevelopmentImage(projectDir)
{
  const devLogoPath = projectDir + '/images/dev_logo.png';
  // Could also use context.project.src instead of projectDir + '/src...'
  const targetPath  = projectDir + '/src/assets/imgs/logo.png';

  let fs = require('fs');
  fs.copyFileSync(devLogoPath, targetPath); 
}

function useProductionImage(projectDir)
{
  const prodLogoPath = projectDir + '/images/prod_logo.png';
  const targetPath   = projectDir + '/src/assets/imgs/logo.png';

  let fs = require('fs');
  fs.copyFileSync(prodLogoPath, targetPath);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...