Skip to content

Commit 5e5aeff

Browse files
authored
feat(bundle): support autoExternal configuration (#74)
1 parent 3c0501c commit 5e5aeff

File tree

28 files changed

+525
-101
lines changed

28 files changed

+525
-101
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"name": "@e2e/auto-external-default",
3+
"dependencies": {
4+
"react": "^18.3.1"
5+
}
6+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { generateBundleCjsConfig, generateBundleEsmConfig } from '@e2e/helper';
2+
import { defineConfig } from '@rslib/core';
3+
4+
export default defineConfig({
5+
lib: [generateBundleEsmConfig(__dirname), generateBundleCjsConfig(__dirname)],
6+
source: {
7+
entry: {
8+
main: '../fixtures/src/index.ts',
9+
},
10+
},
11+
});
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"name": "@e2e/auto-external-with-sub-path",
3+
"dependencies": {
4+
"react": "^18.3.1"
5+
}
6+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { generateBundleCjsConfig, generateBundleEsmConfig } from '@e2e/helper';
2+
import { defineConfig } from '@rslib/core';
3+
4+
export default defineConfig({
5+
lib: [generateBundleEsmConfig(__dirname), generateBundleCjsConfig(__dirname)],
6+
source: {
7+
entry: {
8+
main: './src/index.ts',
9+
},
10+
},
11+
});
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import React from 'react';
2+
import ReactJsx from 'react/jsx-runtime';
3+
4+
export const foo = () => {
5+
return [React.version, ReactJsx.jsx];
6+
};
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"name": "@e2e/auto-external-false",
3+
"dependencies": {
4+
"react": "^18.3.1"
5+
}
6+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { generateBundleCjsConfig, generateBundleEsmConfig } from '@e2e/helper';
2+
import { defineConfig } from '@rslib/core';
3+
4+
export default defineConfig({
5+
lib: [
6+
{
7+
...generateBundleEsmConfig(__dirname),
8+
autoExternal: false,
9+
},
10+
{
11+
...generateBundleCjsConfig(__dirname),
12+
autoExternal: false,
13+
},
14+
],
15+
source: {
16+
entry: {
17+
main: '../fixtures/src/index.ts',
18+
},
19+
},
20+
});
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import React from 'react';
2+
3+
export const foo = () => {
4+
return React.version;
5+
};

e2e/cases/auto-external/index.test.ts

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import { join } from 'node:path';
2+
import { buildAndGetResults } from '@e2e/helper';
3+
import { expect, test } from 'vitest';
4+
5+
test('auto external default should works', async () => {
6+
const fixturePath = join(__dirname, 'default');
7+
const { entries } = await buildAndGetResults(fixturePath);
8+
9+
expect(entries.esm).toContain(
10+
'import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react"',
11+
);
12+
13+
expect(entries.cjs).toContain(
14+
'var external_react_namespaceObject = require("react");',
15+
);
16+
});
17+
18+
test('auto external sub path should works', async () => {
19+
const fixturePath = join(__dirname, 'external-sub-path');
20+
const { entries } = await buildAndGetResults(fixturePath);
21+
22+
expect(entries.esm).toContain(
23+
'import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react"',
24+
);
25+
expect(entries.esm).toContain(
26+
'import * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime__ from "react/jsx-runtime"',
27+
);
28+
29+
expect(entries.cjs).toContain(
30+
'var external_react_namespaceObject = require("react");',
31+
);
32+
expect(entries.cjs).toContain(
33+
'var jsx_runtime_namespaceObject = require("react/jsx-runtime");',
34+
);
35+
});
36+
37+
test('auto external false should works', async () => {
38+
const fixturePath = join(__dirname, 'false');
39+
const { entries } = await buildAndGetResults(fixturePath);
40+
41+
expect(entries.esm).not.toContain(
42+
'import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react"',
43+
);
44+
45+
expect(entries.cjs).not.toContain(
46+
'var external_react_namespaceObject = require("react");',
47+
);
48+
});
49+
50+
test('externals should overrides auto external', async () => {
51+
const fixturePath = join(__dirname, 'with-externals');
52+
const { entries } = await buildAndGetResults(fixturePath);
53+
54+
expect(entries.esm).toContain(
55+
'import * as __WEBPACK_EXTERNAL_MODULE_react1__ from "react1"',
56+
);
57+
58+
expect(entries.cjs).toContain(
59+
'var external_react1_namespaceObject = require("react1");',
60+
);
61+
});
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"name": "@e2e/auto-external-with-externals",
3+
"dependencies": {
4+
"react": "^18.3.1"
5+
}
6+
}

0 commit comments

Comments
 (0)