Skip to content

Commit cafaf00

Browse files
committed
chore: update
1 parent 67b4f08 commit cafaf00

File tree

12 files changed

+172
-13
lines changed

12 files changed

+172
-13
lines changed

packages/core/src/config.ts

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1158,26 +1158,28 @@ const composeBundlelessExternalConfig = (
11581158
// user should use copy to keep origin file or use another separate entry to deal this
11591159
if (resolvedRequest.startsWith('.')) {
11601160
const ext = extname(resolvedRequest);
1161-
if (ext) {
1162-
// 1. js files hit JS_EXTENSIONS_PATTERN, ./foo.ts -> ./foo.mjs
1163-
if (JS_EXTENSIONS_PATTERN.test(resolvedRequest)) {
1164-
if (jsRedirectExtension) {
1165-
resolvedRequest = resolvedRequest.replace(
1166-
/\.[^.]+$/,
1167-
jsExtension,
1168-
);
1169-
}
1170-
} else {
1171-
// 2. asset files, does not match jsExtensionsPattern, eg: ./foo.png -> ./foo.mjs
1172-
if (assetRedirect) {
1161+
1162+
// 1. js files hit JS_EXTENSIONS_PATTERN, ./foo.ts -> ./foo.mjs
1163+
if (JS_EXTENSIONS_PATTERN.test(resolvedRequest)) {
1164+
if (jsRedirectExtension) {
1165+
if (ext) {
11731166
resolvedRequest = resolvedRequest.replace(
11741167
/\.[^.]+$/,
11751168
jsExtension,
11761169
);
1170+
} else {
1171+
resolvedRequest = `${resolvedRequest}${jsExtension}`;
11771172
}
11781173
}
11791174
} else {
1180-
resolvedRequest = `${resolvedRequest}${jsExtension}`;
1175+
// 2. asset files, does not match jsExtensionsPattern, eg: ./foo.png -> ./foo.mjs
1176+
// non-js && non-css files
1177+
if (ext && assetRedirect) {
1178+
resolvedRequest = resolvedRequest.replace(
1179+
/\.[^.]+$/,
1180+
jsExtension,
1181+
);
1182+
}
11811183
}
11821184
}
11831185

pnpm-lock.yaml

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import path from 'node:path';
2+
import { buildAndGetResults, queryContent } from 'test-helper';
3+
import { beforeAll, expect, test } from 'vitest';
4+
5+
let contents: Awaited<ReturnType<typeof buildAndGetResults>>['contents'];
6+
7+
beforeAll(async () => {
8+
const fixturePath = path.resolve(__dirname, './asset');
9+
contents = (await buildAndGetResults({ fixturePath })).contents;
10+
});
11+
12+
test('0. default', async () => {
13+
const { content: indexJs } = queryContent(contents.esm0!, /index\.js/);
14+
const { content: indexCjs } = queryContent(contents.cjs0!, /index\.cjs/);
15+
expect(indexJs).toMatchInlineSnapshot(`
16+
"import * as __WEBPACK_EXTERNAL_MODULE__assets_logo_js_450929b7__ from "./assets/logo.js";
17+
__WEBPACK_EXTERNAL_MODULE__assets_logo_js_450929b7__["default"];
18+
"
19+
`);
20+
expect(indexCjs).toContain('require("./assets/logo.cjs")');
21+
});
22+
23+
test('1. redirect.asset = false', async () => {
24+
const { content: indexJs } = queryContent(contents.esm1!, /index\.js/);
25+
const { content: indexCjs } = queryContent(contents.cjs1!, /index\.cjs/);
26+
expect(indexJs).toMatchInlineSnapshot(`
27+
"import * as __WEBPACK_EXTERNAL_MODULE__assets_logo_svg_cfb3a4d9__ from "./assets/logo.svg";
28+
__WEBPACK_EXTERNAL_MODULE__assets_logo_svg_cfb3a4d9__["default"];
29+
"
30+
`);
31+
expect(indexCjs).toContain('require("./assets/logo.svg")');
32+
})
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"name": "asset-redirect-test",
3+
"version": "1.0.0",
4+
"private": true,
5+
"type": "module"
6+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import { defineConfig } from '@rslib/core';
2+
import { generateBundleCjsConfig, generateBundleEsmConfig } from 'test-helper';
3+
4+
export default defineConfig({
5+
lib: [
6+
// 0. default
7+
generateBundleEsmConfig({
8+
bundle: false,
9+
output: {
10+
distPath: {
11+
root: 'dist/default/esm',
12+
},
13+
},
14+
}),
15+
generateBundleCjsConfig({
16+
bundle: false,
17+
output: {
18+
distPath: {
19+
root: 'dist/default/cjs',
20+
},
21+
},
22+
}),
23+
// 1. redirect.asset: false
24+
generateBundleEsmConfig({
25+
bundle: false,
26+
redirect: { asset: false },
27+
output: {
28+
distPath: {
29+
root: 'dist/asset-false/esm',
30+
},
31+
},
32+
}),
33+
generateBundleCjsConfig({
34+
bundle: false,
35+
redirect: { asset: false },
36+
output: {
37+
distPath: {
38+
root: 'dist/asset-false/cjs',
39+
},
40+
},
41+
}),
42+
],
43+
output: {
44+
target: 'web',
45+
},
46+
});
Lines changed: 7 additions & 0 deletions
Loading
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import svg from './assets/logo.svg';
2+
3+
svg;
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { buildAndGetResults } from 'test-helper';
2+
import { expectFileContainContent } from 'test-helper/vitest';
3+
import { expect, test } from 'vitest';
4+
5+
test('should output css asset', async () => {
6+
const fixturePath = __dirname;
7+
const { contents } = await buildAndGetResults({ fixturePath, type: 'css' });
8+
const esmFiles = Object.keys(contents.esm);
9+
expect(esmFiles).toMatchInlineSnapshot(`
10+
[
11+
"<ROOT>/tests/integration/style/asset/dist/esm/index.css",
12+
]
13+
`);
14+
expectFileContainContent(
15+
contents.esm,
16+
'index.css',
17+
'background: url(./static/svg/logo.svg)',
18+
);
19+
20+
const cjsFiles = Object.keys(contents.cjs);
21+
expect(cjsFiles).toMatchInlineSnapshot(`
22+
[
23+
"<ROOT>/tests/integration/style/asset/dist/cjs/index.css",
24+
]
25+
`);
26+
expectFileContainContent(
27+
contents.cjs,
28+
'index.css',
29+
'background: url(./static/svg/logo.svg)',
30+
);
31+
});
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"name": "style-asset-bundle-false-test",
3+
"version": "1.0.0",
4+
"private": true,
5+
"type": "module"
6+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { defineConfig } from '@rslib/core';
2+
import { generateBundleCjsConfig, generateBundleEsmConfig } from 'test-helper';
3+
4+
export default defineConfig({
5+
lib: [
6+
generateBundleEsmConfig({ bundle: false }),
7+
generateBundleCjsConfig({ bundle: false }),
8+
],
9+
output: {
10+
target: 'web',
11+
},
12+
});

0 commit comments

Comments
 (0)