@nx/rspack
Version:
61 lines (60 loc) • 3.13 kB
JavaScript
;
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();
});
}