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