Влюбен съм в NX mono-repo tool и какво има да не обичам? Невероятна интеграция с Angular и Nestjs, изчислително кеширане, инструменти за управление на много езици/мулти проекти, NX VSC конзола и разбира се, NX CLI. С CLI можете да рационализирате работата си, като използвате много „генератори на плъгини“ и „изпълнете целеви конфигурации“!

Днес ще ви покажа основен начин за разширяване на функционалността на тези цели за изпълнение, без да е необходимо да създаваме наши собствени, използвайки персонализирани аргументи/флагове.

Първата много популярна цел е <app>:serve, за да предадете персонализирани аргументи, трябва да обвиете стойностите на --args=:

nx run api:serve --args='--env=develop' # single value

Ако искате да предадете няколко стойности, просто ги разделете със запетая вътре в низа:

nx run api:serve --args='--env=develop,--locale=en' # multiple values

Следващата популярна цел е <app>:build можете да предадете стойностите директно като нормални параметри:

nx run api:build --env=develop # single value
nx run api:build --env=develop --locale=en # multiple value

Тези флагове не са особено полезни за целта за изграждане, освен ако не ги използвате в персонализирана команда за изпълнение като:

// project.json
... 
"build-seed": {
   "executor": "@nrwl/node:webpack",
   "outputs": ["{options.outputPath}"],
   "options": {
     "outputPath": "dist/apps/api",
     "main": "apps/api/src/main-seeder.ts",
     "tsConfig": "apps/api/tsconfig.app.json",
     "assets": ["apps/api/src/assets"]
   },
   "configurations": {
     "production": {
       "optimization": true,
       "extractLicenses": true,
       "inspect": false,
       "fileReplacements": []
    }
  }
 },  
"seed": {
   "executor": "@nrwl/workspace:run-commands",
   "options": {
     "commands": [
       "nx run api:build-seed:production",
       "node dist/apps/api/main.js"
    ],
    "parallel": false
  }
}
...

Сега тези флагове са налични в процеса node dist/apps/api/main.js, така че мога да заредя в зависимост от env, локал и т.н.

Сега вашият process обект във вашия възлов процес ще има достъп до тази стойност в process.argv. Това ще бъде масив от низове, така че ще трябва да анализирате и/или манипулирате стойностите, като използвате нещо подобно:

export function parseNxArgs(processArgv: typeof process.argv /* string[] */) {
  return processArgv.reduce<Record<string, string>>((agg, arg) => {
    if (arg.indexOf('--') !== -1) {
      let val = arg.replace('--', '').split('=');
      if (val[0] && val[1]) agg[val[0].trim()] = val[1]; // make sure to remove white spaces
    };
    return agg;
  } , {});
}

Във вашия код вече можете да използвате:

const parsedValues = parseNxArgs(process.argv);
// parsedValues.myArg
// parsedValues.myArg2
// parsedValues...

Не забравяйте да проверите nx.dev и да го използвате, за да създадете следващия си забавен проект.

Надявам се, че тази статия ви е харесала толкова, колкото и аз (беше ми първата!) и ако я намерите за полезна или неправилна, моля, не се колебайте да ми оставите коментар!