UNPKG

@nx/react

Version:

The React plugin for Nx contains executors and generators for managing React applications and libraries within an Nx workspace. It provides: - Integration with libraries such as Jest, Vitest, Playwright, Cypress, and Storybook. - Generators for applica

98 lines (96 loc) 3.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.addRollupBuildTarget = addRollupBuildTarget; const devkit_1 = require("@nx/devkit"); const maybe_js_1 = require("../../../utils/maybe-js"); const versions_1 = require("../../../utils/versions"); async function addRollupBuildTarget(host, options, external = new Set(['react', 'react-dom'])) { const tasks = []; const { configurationGenerator } = (0, devkit_1.ensurePackage)('@nx/rollup', versions_1.nxVersion); tasks.push(await configurationGenerator(host, { ...options, project: options.name, skipFormat: true, })); if (!options.skipPackageJson) { // These are used in `@nx/react/plugins/bundle-rollup` tasks.push((0, devkit_1.addDependenciesToPackageJson)(host, {}, { '@rollup/plugin-url': versions_1.rollupPluginUrlVersion, '@svgr/rollup': versions_1.svgrRollupVersion, })); } if (options.style === '@emotion/styled') { external.add('@emotion/react/jsx-runtime'); } else { external.add('react/jsx-runtime'); } const nxJson = (0, devkit_1.readNxJson)(host); const hasRollupPlugin = !!nxJson.plugins?.some((p) => typeof p === 'string' ? p === '@nx/rollup/plugin' : p.plugin === '@nx/rollup/plugin'); if (hasRollupPlugin) { // New behavior, using rollup config file and inferred target. host.write((0, devkit_1.joinPathFragments)(options.projectRoot, 'rollup.config.cjs'), `const { withNx } = require('@nx/rollup/with-nx'); const url = require('@rollup/plugin-url'); const svg = require('@svgr/rollup'); module.exports = withNx( { main: '${(0, maybe_js_1.maybeJs)(options, './src/index.ts')}', outputPath: '${options.isUsingTsSolutionConfig ? './dist' : (0, devkit_1.joinPathFragments)((0, devkit_1.offsetFromRoot)(options.projectRoot), 'dist', options.projectRoot)}', tsConfig: './tsconfig.lib.json', compiler: '${options.compiler ?? 'babel'}', external: ${JSON.stringify(Array.from(external))}, format: ${JSON.stringify(options.format ?? ['esm'])}, assets:[{ input: '.', output: '.', glob: 'README.md'}], }, { // Provide additional rollup configuration here. See: https://rollupjs.org/configuration-options plugins: [ svg({ svgo: false, titleProp: true, ref: true, }), url({ limit: 10000, // 10kB }), ], } ); `); } else { // Legacy behavior, there is a target in project.json using rollup executor. const { targets } = (0, devkit_1.readProjectConfiguration)(host, options.name); targets.build = { executor: '@nx/rollup:rollup', outputs: ['{options.outputPath}'], options: { outputPath: (0, devkit_1.joinPathFragments)('dist', options.projectRoot), tsConfig: `${options.projectRoot}/tsconfig.lib.json`, project: `${options.projectRoot}/package.json`, entryFile: (0, maybe_js_1.maybeJs)(options, `${options.projectRoot}/src/index.ts`), external: Array.from(external), rollupConfig: `@nx/react/plugins/bundle-rollup`, compiler: options.compiler ?? 'babel', assets: [ { glob: `${options.projectRoot}/README.md`, input: '.', output: '.', }, ], }, }; (0, devkit_1.updateProjectConfiguration)(host, options.name, { root: options.projectRoot, sourceRoot: (0, devkit_1.joinPathFragments)(options.projectRoot, 'src'), projectType: 'library', tags: options.parsedTags, targets, }); } return (0, devkit_1.runTasksInSerial)(...tasks); }