UNPKG

@nx/rspack

Version:

The Nx Plugin for Rspack contains executors and generators that support building applications using Rspack.

61 lines (60 loc) 3.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = runExecutor; const devkit_1 = require("@nx/devkit"); const async_iterable_1 = require("@nx/devkit/src/utils/async-iterable"); const ts_solution_setup_1 = require("@nx/js/src/utils/typescript/ts-solution-setup"); const dev_server_1 = require("@rspack/dev-server"); const create_compiler_1 = require("../../utils/create-compiler"); const mode_utils_1 = require("../../utils/mode-utils"); const normalize_options_1 = require("../rspack/lib/normalize-options"); const get_dev_server_config_1 = require("./lib/get-dev-server-config"); async function* runExecutor(options, context) { process.env.NODE_ENV ??= options.mode ?? 'development'; if ((0, mode_utils_1.isMode)(process.env.NODE_ENV)) { options.mode = process.env.NODE_ENV; } const buildTarget = (0, devkit_1.parseTargetString)(options.buildTarget, context.projectGraph); const buildOptions = (0, devkit_1.readTargetOptions)(buildTarget, context); process.env.NX_BUILD_LIBS_FROM_SOURCE = `${buildOptions.buildLibsFromSource}`; process.env.NX_BUILD_TARGET = options.buildTarget; const metadata = context.projectsConfigurations.projects[context.projectName]; const sourceRoot = (0, ts_solution_setup_1.getProjectSourceRoot)(metadata); const normalizedBuildOptions = (0, normalize_options_1.normalizeOptions)(buildOptions, context.root, metadata.root, sourceRoot); let devServerConfig = (0, get_dev_server_config_1.getDevServerOptions)(context.root, options, normalizedBuildOptions); const compiler = await (0, create_compiler_1.createCompiler)({ ...normalizedBuildOptions, devServer: devServerConfig, mode: options.mode, }, context); // Use the first one if it's MultiCompiler // https://webpack.js.org/configuration/dev-server/#root:~:text=Be%20aware%20that%20when%20exporting%20multiple%20configurations%20only%20the%20devServer%20options%20for%20the%20first%20configuration%20will%20be%20taken%20into%20account%20and%20used%20for%20all%20the%20configurations%20in%20the%20array. const firstCompiler = (0, create_compiler_1.isMultiCompiler)(compiler) ? compiler.compilers[0] : compiler; devServerConfig = { ...devServerConfig, ...firstCompiler.options.devServer, }; const baseUrl = `http://localhost:${devServerConfig.port ?? 4200}`; return yield* (0, async_iterable_1.createAsyncIterable)(({ next }) => { const server = new dev_server_1.RspackDevServer({ ...devServerConfig, onListening: () => { next({ success: true, baseUrl, }); }, }, compiler); server.compiler.hooks.done.tap('NX Rspack Dev Server', (stats) => { if (stats.hasErrors()) { devkit_1.logger.error(`NX Compilation failed. See above for more details.`); } else { devkit_1.logger.info(`NX Server ready at ${baseUrl}`); } }); server.start(); }); }