fix(bundling): load rollup config using the rollup version installed in the workspace (#26298)
This PR updates `@nx/rollup/plugin` so it loads the config file using `loadConfigFile` from the Rollup version installed in the workspace. This fixes the issue when initializing in the [axios](https://github.com/axios/axios) repo, since the `require` call in their config is no longer valid ESM in Rollup 4. ## Current Behavior <!-- This is the behavior we have today --> ## Expected Behavior <!-- This is the behavior we should expect with the changes in this PR --> ## Related Issue(s) <!-- Please link the issue being fixed so it gets closed when this is merged. --> Fixes # Co-authored-by: Emily Xiong <xiongemi@gmail.com>
This commit is contained in:
parent
bccb2c5018
commit
00c1e3925a
@ -1,4 +1,4 @@
|
|||||||
import { type CreateNodesContext, joinPathFragments } from '@nx/devkit';
|
import { type CreateNodesContext } from '@nx/devkit';
|
||||||
import { createNodes } from './plugin';
|
import { createNodes } from './plugin';
|
||||||
import { TempFs } from 'nx/src/internal-testing-utils/temp-fs';
|
import { TempFs } from 'nx/src/internal-testing-utils/temp-fs';
|
||||||
|
|
||||||
@ -10,9 +10,6 @@ jest.mock('rollup/loadConfigFile', () => {
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
// @ts-ignore
|
|
||||||
import { loadConfigFile } from 'rollup/loadConfigFile';
|
|
||||||
|
|
||||||
describe('@nx/rollup/plugin', () => {
|
describe('@nx/rollup/plugin', () => {
|
||||||
let createNodesFunction = createNodes[1];
|
let createNodesFunction = createNodes[1];
|
||||||
let context: CreateNodesContext;
|
let context: CreateNodesContext;
|
||||||
@ -65,6 +62,7 @@ describe('@nx/rollup/plugin', () => {
|
|||||||
}`
|
}`
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const { loadConfigFile } = require('rollup/loadConfigFile');
|
||||||
loadConfigFile.mockReturnValue(rollupConfigOptions);
|
loadConfigFile.mockReturnValue(rollupConfigOptions);
|
||||||
|
|
||||||
process.chdir(tempFs.tempDir);
|
process.chdir(tempFs.tempDir);
|
||||||
@ -140,6 +138,8 @@ describe('@nx/rollup/plugin', () => {
|
|||||||
console.log("hello world");
|
console.log("hello world");
|
||||||
}`
|
}`
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const { loadConfigFile } = require('rollup/loadConfigFile');
|
||||||
loadConfigFile.mockReturnValue(rollupConfigOptions);
|
loadConfigFile.mockReturnValue(rollupConfigOptions);
|
||||||
|
|
||||||
process.chdir(tempFs.tempDir);
|
process.chdir(tempFs.tempDir);
|
||||||
|
|||||||
@ -2,24 +2,20 @@ import { workspaceDataDirectory } from 'nx/src/utils/cache-directory';
|
|||||||
import { basename, dirname, join } from 'path';
|
import { basename, dirname, join } from 'path';
|
||||||
import { existsSync, readdirSync } from 'fs';
|
import { existsSync, readdirSync } from 'fs';
|
||||||
import {
|
import {
|
||||||
type TargetConfiguration,
|
|
||||||
type CreateDependencies,
|
type CreateDependencies,
|
||||||
type CreateNodes,
|
type CreateNodes,
|
||||||
readJsonFile,
|
|
||||||
writeJsonFile,
|
|
||||||
detectPackageManager,
|
|
||||||
CreateNodesContext,
|
CreateNodesContext,
|
||||||
|
detectPackageManager,
|
||||||
joinPathFragments,
|
joinPathFragments,
|
||||||
|
readJsonFile,
|
||||||
|
type TargetConfiguration,
|
||||||
|
writeJsonFile,
|
||||||
} from '@nx/devkit';
|
} from '@nx/devkit';
|
||||||
import { calculateHashForCreateNodes } from '@nx/devkit/src/utils/calculate-hash-for-create-nodes';
|
import { calculateHashForCreateNodes } from '@nx/devkit/src/utils/calculate-hash-for-create-nodes';
|
||||||
import { getLockFileName } from '@nx/js';
|
import { getLockFileName } from '@nx/js';
|
||||||
import { getNamedInputs } from '@nx/devkit/src/utils/get-named-inputs';
|
import { getNamedInputs } from '@nx/devkit/src/utils/get-named-inputs';
|
||||||
import { type RollupOptions } from 'rollup';
|
import { type RollupOptions } from 'rollup';
|
||||||
|
|
||||||
// This import causes an error due to the module resolution used. If we switch to bundler or nodenext in the future we remove this ignore.
|
|
||||||
// @ts-ignore
|
|
||||||
import { loadConfigFile } from 'rollup/loadConfigFile';
|
|
||||||
|
|
||||||
const cachePath = join(workspaceDataDirectory, 'rollup.hash');
|
const cachePath = join(workspaceDataDirectory, 'rollup.hash');
|
||||||
const targetsCache = readTargetsCache();
|
const targetsCache = readTargetsCache();
|
||||||
|
|
||||||
@ -94,6 +90,27 @@ async function buildRollupTarget(
|
|||||||
options: RollupPluginOptions,
|
options: RollupPluginOptions,
|
||||||
context: CreateNodesContext
|
context: CreateNodesContext
|
||||||
): Promise<Record<string, TargetConfiguration>> {
|
): Promise<Record<string, TargetConfiguration>> {
|
||||||
|
let loadConfigFile: (
|
||||||
|
path: string,
|
||||||
|
commandOptions: unknown,
|
||||||
|
watchMode: boolean
|
||||||
|
) => Promise<{ options: RollupOptions[] }>;
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Try to load the workspace version of rollup first (it should already exist).
|
||||||
|
// Using the workspace rollup ensures that the config file is compatible with the `loadConfigFile` function.
|
||||||
|
// e.g. rollup@2 supports having `require` calls in rollup config, but rollup@4 does not.
|
||||||
|
const m = require(require.resolve('rollup/loadConfigFile', {
|
||||||
|
paths: [dirname(configFilePath)],
|
||||||
|
}));
|
||||||
|
// Rollup 2 has this has default export, but it is named in 3 and 4.
|
||||||
|
// See: https://www.unpkg.com/browse/rollup@2.79.1/dist/loadConfigFile.js
|
||||||
|
loadConfigFile = typeof m === 'function' ? m : m.loadConfigFile;
|
||||||
|
} catch {
|
||||||
|
// Fallback to our own if needed.
|
||||||
|
loadConfigFile = require('rollup/loadConfigFile').loadConfigFile;
|
||||||
|
}
|
||||||
|
|
||||||
const namedInputs = getNamedInputs(projectRoot, context);
|
const namedInputs = getNamedInputs(projectRoot, context);
|
||||||
const rollupConfig = (
|
const rollupConfig = (
|
||||||
(await loadConfigFile(
|
(await loadConfigFile(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user