Влюбен съм в 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 и да го използвате, за да създадете следващия си забавен проект.
Надявам се, че тази статия ви е харесала толкова, колкото и аз (беше ми първата!) и ако я намерите за полезна или неправилна, моля, не се колебайте да ми оставите коментар!