From 19dc930e1f3760a780128cbb11dfb63644c7d342 Mon Sep 17 00:00:00 2001 From: Soon Date: Thu, 23 Jan 2025 16:17:45 +0800 Subject: [PATCH] feat: support asset module (#684) --- .../rslib.config.ts | 5 - .../src}/assets/logo.svg | 0 .../src/components/CounterButton/index.tsx | 8 +- .../src/env.d.ts | 5 + .../src/index.scss | 7 + .../rslib.config.ts | 6 - .../src/components/CounterButton/index.tsx | 8 +- .../react-component-bundle-false/src/env.d.ts | 5 + .../react-component-bundle/rslib.config.ts | 1 - .../src/components/CounterButton/index.tsx | 8 +- examples/react-component-bundle/src/env.d.ts | 5 + packages/core/src/asset/LibSvgrPatchPlugin.ts | 68 ++++ packages/core/src/asset/assetConfig.ts | 150 +++++++- packages/core/src/config.ts | 39 +- packages/core/src/constant.ts | 11 +- packages/core/src/css/LibCssExtractPlugin.ts | 10 +- packages/core/src/css/cssConfig.ts | 9 +- packages/core/src/types/config.ts | 4 +- .../tests/__snapshots__/config.test.ts.snap | 16 + packages/core/tests/constant.test.ts | 19 +- pnpm-lock.yaml | 14 +- tests/e2e/react-component/index.pw.test.ts | 10 +- .../asset/__snapshots__/index.test.ts.snap | 139 ++++++-- .../asset/assets-include/package.json | 6 + .../asset/assets-include/rslib.config.ts | 35 ++ .../asset/assets-include/src/assets/draft.txt | 2 + .../asset/assets-include/src/index.js | 3 + .../asset/{name => hash}/package.json | 0 tests/integration/asset/hash/rslib.config.ts | 60 ++++ .../asset/{name => hash/src}/assets/image.png | Bin .../asset/{name => hash}/src/index.jsx | 2 +- tests/integration/asset/index.test.ts | 334 +++++++++++++++--- tests/integration/asset/json/package.json | 6 + .../asset/{name => json}/rslib.config.ts | 12 +- .../asset/json/src/assets/data.json | 4 + tests/integration/asset/json/src/index.js | 3 + tests/integration/asset/limit/rslib.config.ts | 64 +++- .../src}/assets/logo.svg | 0 tests/integration/asset/limit/src/index.js | 2 +- tests/integration/asset/path/rslib.config.ts | 28 +- .../asset/path/{ => src}/assets/image.png | Bin tests/integration/asset/path/src/index.js | 2 +- .../asset/public-path/rslib.config.ts | 24 +- .../public-path/src}/assets/image.png | Bin .../asset/public-path/src/index.js | 2 +- tests/integration/asset/source/package.json | 6 + .../integration/asset/source/rslib.config.ts | 46 +++ .../asset/source/src/assets/draft.txt | 2 + tests/integration/asset/source/src/index.js | 3 + tests/integration/asset/svgr/rslib.config.ts | 60 ++-- .../asset/svgr/{ => src}/assets/logo.svg | 0 .../asset/svgr/src/defaultImport.js | 3 + tests/integration/asset/svgr/src/index.js | 6 +- .../integration/asset/svgr/src/namedExport.js | 3 - .../integration/asset/svgr/src/namedImport.js | 3 + .../integration/asset/svgr/src/queryImport.js | 3 + .../__snapshots__/index.test.ts.snap | 14 +- .../bundle-false/asset/rslib.config.ts | 11 - .../bundle-false/asset/src/assets/image.png | Bin 0 -> 178620 bytes .../asset/{ => src}/assets/logo.svg | 0 .../bundle-false/asset/src/index.js | 4 +- tests/integration/bundle-false/index.test.ts | 69 +++- .../bundle-false/svgr/rslib.config.ts | 2 +- .../svgr/{ => src}/assets/logo.svg | 0 .../bundle-false/svgr/src/index.jsx | 2 +- tests/integration/redirect/asset.test.ts | 32 ++ tests/integration/redirect/asset/package.json | 6 + .../redirect/asset/rslib.config.ts | 46 +++ .../redirect/asset/src/assets/logo.svg | 7 + tests/integration/redirect/asset/src/index.js | 3 + tests/integration/style/asset/index.test.ts | 31 ++ tests/integration/style/asset/package.json | 6 + tests/integration/style/asset/rslib.config.ts | 12 + .../style/asset/src/assets/logo.svg | 7 + tests/integration/style/asset/src/index.css | 3 + website/docs/en/config/lib/redirect.mdx | 16 +- website/docs/zh/config/lib/redirect.mdx | 18 +- 77 files changed, 1313 insertions(+), 247 deletions(-) rename {tests/integration/asset/limit => examples/preact-component-bundle-false/src}/assets/logo.svg (100%) create mode 100644 packages/core/src/asset/LibSvgrPatchPlugin.ts create mode 100644 tests/integration/asset/assets-include/package.json create mode 100644 tests/integration/asset/assets-include/rslib.config.ts create mode 100644 tests/integration/asset/assets-include/src/assets/draft.txt create mode 100644 tests/integration/asset/assets-include/src/index.js rename tests/integration/asset/{name => hash}/package.json (100%) create mode 100644 tests/integration/asset/hash/rslib.config.ts rename tests/integration/asset/{name => hash/src}/assets/image.png (100%) rename tests/integration/asset/{name => hash}/src/index.jsx (61%) create mode 100644 tests/integration/asset/json/package.json rename tests/integration/asset/{name => json}/rslib.config.ts (80%) create mode 100644 tests/integration/asset/json/src/assets/data.json create mode 100644 tests/integration/asset/json/src/index.js rename tests/integration/asset/{public-path => limit/src}/assets/logo.svg (100%) rename tests/integration/asset/path/{ => src}/assets/image.png (100%) rename tests/integration/{bundle-false/asset => asset/public-path/src}/assets/image.png (100%) create mode 100644 tests/integration/asset/source/package.json create mode 100644 tests/integration/asset/source/rslib.config.ts create mode 100644 tests/integration/asset/source/src/assets/draft.txt create mode 100644 tests/integration/asset/source/src/index.js rename tests/integration/asset/svgr/{ => src}/assets/logo.svg (100%) create mode 100644 tests/integration/asset/svgr/src/defaultImport.js delete mode 100644 tests/integration/asset/svgr/src/namedExport.js create mode 100644 tests/integration/asset/svgr/src/namedImport.js create mode 100644 tests/integration/asset/svgr/src/queryImport.js create mode 100644 tests/integration/bundle-false/asset/src/assets/image.png rename tests/integration/bundle-false/asset/{ => src}/assets/logo.svg (100%) rename tests/integration/bundle-false/svgr/{ => src}/assets/logo.svg (100%) create mode 100644 tests/integration/redirect/asset.test.ts create mode 100644 tests/integration/redirect/asset/package.json create mode 100644 tests/integration/redirect/asset/rslib.config.ts create mode 100644 tests/integration/redirect/asset/src/assets/logo.svg create mode 100644 tests/integration/redirect/asset/src/index.js create mode 100644 tests/integration/style/asset/index.test.ts create mode 100644 tests/integration/style/asset/package.json create mode 100644 tests/integration/style/asset/rslib.config.ts create mode 100644 tests/integration/style/asset/src/assets/logo.svg create mode 100644 tests/integration/style/asset/src/index.css diff --git a/examples/preact-component-bundle-false/rslib.config.ts b/examples/preact-component-bundle-false/rslib.config.ts index 25877d47c..a61a39bed 100644 --- a/examples/preact-component-bundle-false/rslib.config.ts +++ b/examples/preact-component-bundle-false/rslib.config.ts @@ -3,11 +3,6 @@ import { pluginSass } from '@rsbuild/plugin-sass'; import { defineConfig } from '@rslib/core'; export default defineConfig({ - source: { - entry: { - index: ['./src/**'], - }, - }, lib: [ { bundle: false, diff --git a/tests/integration/asset/limit/assets/logo.svg b/examples/preact-component-bundle-false/src/assets/logo.svg similarity index 100% rename from tests/integration/asset/limit/assets/logo.svg rename to examples/preact-component-bundle-false/src/assets/logo.svg diff --git a/examples/preact-component-bundle-false/src/components/CounterButton/index.tsx b/examples/preact-component-bundle-false/src/components/CounterButton/index.tsx index 09f8b087a..52b41d1bb 100644 --- a/examples/preact-component-bundle-false/src/components/CounterButton/index.tsx +++ b/examples/preact-component-bundle-false/src/components/CounterButton/index.tsx @@ -1,4 +1,5 @@ import type { FunctionComponent } from 'preact'; +import logo from '../../assets/logo.svg'; import styles from './index.module.scss'; interface CounterButtonProps { @@ -10,7 +11,12 @@ export const CounterButton: FunctionComponent = ({ onClick, label, }) => ( - ); diff --git a/examples/preact-component-bundle-false/src/env.d.ts b/examples/preact-component-bundle-false/src/env.d.ts index 0506fbcb4..8fa0ce11c 100644 --- a/examples/preact-component-bundle-false/src/env.d.ts +++ b/examples/preact-component-bundle-false/src/env.d.ts @@ -2,3 +2,8 @@ declare module '*.module.scss' { const classes: { [key: string]: string }; export default classes; } + +declare module '*.svg' { + const url: string; + export default url; +} diff --git a/examples/preact-component-bundle-false/src/index.scss b/examples/preact-component-bundle-false/src/index.scss index 2e506a0ac..f4c82dce4 100644 --- a/examples/preact-component-bundle-false/src/index.scss +++ b/examples/preact-component-bundle-false/src/index.scss @@ -1,3 +1,10 @@ +.counter-title { + width: 100px; + height: 100px; + background: no-repeat url('./assets/logo.svg'); + background-size: cover; +} + .counter-text { font-size: 50px; } diff --git a/examples/react-component-bundle-false/rslib.config.ts b/examples/react-component-bundle-false/rslib.config.ts index e02f94d36..cf6bb0639 100644 --- a/examples/react-component-bundle-false/rslib.config.ts +++ b/examples/react-component-bundle-false/rslib.config.ts @@ -3,11 +3,6 @@ import { pluginSass } from '@rsbuild/plugin-sass'; import { defineConfig } from '@rslib/core'; export default defineConfig({ - source: { - entry: { - index: ['./src/**'], - }, - }, lib: [ { format: 'esm', @@ -32,7 +27,6 @@ export default defineConfig({ ], output: { target: 'web', - assetPrefix: 'auto', // TODO: move this line to packages/core/src/asset/assetConfig.ts, }, plugins: [pluginReact(), pluginSass()], }); diff --git a/examples/react-component-bundle-false/src/components/CounterButton/index.tsx b/examples/react-component-bundle-false/src/components/CounterButton/index.tsx index be37643e0..2638731c6 100644 --- a/examples/react-component-bundle-false/src/components/CounterButton/index.tsx +++ b/examples/react-component-bundle-false/src/components/CounterButton/index.tsx @@ -1,4 +1,5 @@ import type React from 'react'; +import logo from '../../assets/logo.svg'; import styles from './index.module.scss'; interface CounterButtonProps { @@ -10,7 +11,12 @@ export const CounterButton: React.FC = ({ onClick, label, }) => ( - ); diff --git a/examples/react-component-bundle-false/src/env.d.ts b/examples/react-component-bundle-false/src/env.d.ts index 0506fbcb4..8fa0ce11c 100644 --- a/examples/react-component-bundle-false/src/env.d.ts +++ b/examples/react-component-bundle-false/src/env.d.ts @@ -2,3 +2,8 @@ declare module '*.module.scss' { const classes: { [key: string]: string }; export default classes; } + +declare module '*.svg' { + const url: string; + export default url; +} diff --git a/examples/react-component-bundle/rslib.config.ts b/examples/react-component-bundle/rslib.config.ts index c00c22eb5..59d42518d 100644 --- a/examples/react-component-bundle/rslib.config.ts +++ b/examples/react-component-bundle/rslib.config.ts @@ -25,7 +25,6 @@ export default defineConfig({ ], output: { target: 'web', - assetPrefix: 'auto', // TODO: move this line to packages/core/src/asset/assetConfig.ts }, plugins: [pluginReact(), pluginSass()], }); diff --git a/examples/react-component-bundle/src/components/CounterButton/index.tsx b/examples/react-component-bundle/src/components/CounterButton/index.tsx index be37643e0..2638731c6 100644 --- a/examples/react-component-bundle/src/components/CounterButton/index.tsx +++ b/examples/react-component-bundle/src/components/CounterButton/index.tsx @@ -1,4 +1,5 @@ import type React from 'react'; +import logo from '../../assets/logo.svg'; import styles from './index.module.scss'; interface CounterButtonProps { @@ -10,7 +11,12 @@ export const CounterButton: React.FC = ({ onClick, label, }) => ( - ); diff --git a/examples/react-component-bundle/src/env.d.ts b/examples/react-component-bundle/src/env.d.ts index 0506fbcb4..8fa0ce11c 100644 --- a/examples/react-component-bundle/src/env.d.ts +++ b/examples/react-component-bundle/src/env.d.ts @@ -2,3 +2,8 @@ declare module '*.module.scss' { const classes: { [key: string]: string }; export default classes; } + +declare module '*.svg' { + const url: string; + export default url; +} diff --git a/packages/core/src/asset/LibSvgrPatchPlugin.ts b/packages/core/src/asset/LibSvgrPatchPlugin.ts new file mode 100644 index 000000000..c696338b5 --- /dev/null +++ b/packages/core/src/asset/LibSvgrPatchPlugin.ts @@ -0,0 +1,68 @@ +import { type Rspack, rspack } from '@rsbuild/core'; +import { getUndoPath } from '../css/utils'; + +const pluginName = 'LIB_SVGR_PATCH_PLUGIN'; + +export const PUBLIC_PATH_PLACEHOLDER = '__RSLIB_SVGR_AUTO_PUBLIC_PATH__'; + +export class LibSvgrPatchPlugin implements Rspack.RspackPluginInstance { + readonly name: string = pluginName; + apply(compiler: Rspack.Compiler): void { + compiler.hooks.make.tap(this.name, (compilation) => { + compilation.hooks.processAssets.tap(this.name, (assets) => { + const isEsm = Boolean(compilation.options.output.module); + const chunkAsset = Object.keys(assets).filter((name) => + /js$/.test(name), + ); + for (const name of chunkAsset) { + compilation.updateAsset(name, (old) => { + const oldSource = old.source().toString(); + const newSource = new rspack.sources.ReplaceSource(old); + + const pattern = new RegExp( + `\\(?['"]${PUBLIC_PATH_PLACEHOLDER}(.*)['"]\\)?`, + 'g', + ); + + const matches = [...oldSource.matchAll(pattern)]; + const len = matches.length; + if (len === 0) { + return old; + } + + const undoPath = getUndoPath( + name, + compilation.outputOptions.path!, + true, + ); + for (let i = 0; i < len; i++) { + const match = matches[i]!; + const filename = match[1]; + const requirePath = `${undoPath}${filename}`; + let replaced = ''; + if (isEsm) { + replaced = `__rslib_svgr_url__${i}__`; + } else { + replaced = `require("${requirePath}")`; + } + newSource.replace( + match.index, + match.index + match[0].length - 1, + replaced, + ); + + if (isEsm) { + newSource.insert( + 0, + `import __rslib_svgr_url__${i}__ from "${requirePath}";\n`, + ); + } + } + + return newSource; + }); + } + }); + }); + } +} diff --git a/packages/core/src/asset/assetConfig.ts b/packages/core/src/asset/assetConfig.ts index 81598e6ea..0c5cbf9a1 100644 --- a/packages/core/src/asset/assetConfig.ts +++ b/packages/core/src/asset/assetConfig.ts @@ -1,5 +1,146 @@ -import type { EnvironmentConfig } from '@rsbuild/core'; +import type { EnvironmentConfig, RsbuildPlugin } from '@rsbuild/core'; +import { CSS_EXTENSIONS_PATTERN } from '../constant'; import type { Format } from '../types'; +import { + LibSvgrPatchPlugin, + PUBLIC_PATH_PLACEHOLDER, +} from './LibSvgrPatchPlugin'; + +const PLUGIN_NAME = 'rsbuild:lib-asset'; + +const RSBUILD_SVGR_PLUGIN_NAME = 'rsbuild:svgr'; + +/** + * Be compatible to css-extract importModule and experimentalLibPreserveExports + * when set experimentalLibPreserveExports to true, the css-loader result can not executed in node side, so clone the assets rule + * 1. js assets: original rule set issuer and experimentalLibPreserveExports: true + * 2. css assets: a copy of original rule + */ +const pluginLibAsset = ({ bundle }: { bundle: boolean }): RsbuildPlugin => ({ + name: PLUGIN_NAME, + pre: [RSBUILD_SVGR_PLUGIN_NAME], + setup(api) { + api.modifyBundlerChain((config, { CHAIN_ID }) => { + // 1. modify svg rule first, svg is special because of svgr + const svgAssetRule = config.module.rules + .get(CHAIN_ID.RULE.SVG) + .oneOfs.get(CHAIN_ID.ONE_OF.SVG_ASSET); + const originalTypeOptions = svgAssetRule.get('type'); + const originalParserOptions = svgAssetRule.get('parser'); + const originalGeneratorOptions = svgAssetRule.get('generator'); + + const isUserSetPublicPath = config.output.get('publicPath') !== 'auto'; + + // if user sets publicPath, do not preserve asset import + const generatorOptions = isUserSetPublicPath + ? originalGeneratorOptions + : { + ...originalGeneratorOptions, + importMode: 'preserve', + }; + + const rule = config.module.rule(CHAIN_ID.RULE.SVG); + + rule.oneOf(CHAIN_ID.ONE_OF.SVG_ASSET).generator(generatorOptions).issuer({ + not: CSS_EXTENSIONS_PATTERN, + }); + + rule + .oneOf(`${CHAIN_ID.ONE_OF.SVG_ASSET}-for-css`) + .type(originalTypeOptions) + .parser(originalParserOptions) + .generator(originalGeneratorOptions) + .issuer(CSS_EXTENSIONS_PATTERN); + + // 2. modify other assets rules + const ruleIds = [ + CHAIN_ID.RULE.FONT, + CHAIN_ID.RULE.MEDIA, + CHAIN_ID.RULE.IMAGE, + CHAIN_ID.RULE.ADDITIONAL_ASSETS, + ]; + for (const ruleId of ruleIds) { + const oneOfId = `${ruleId}-asset`; + const assetRule = config.module.rules.get(ruleId); + if (!assetRule) { + continue; + } + const assetRuleOneOf = assetRule.oneOfs.get(oneOfId); + + const originalTypeOptions = assetRuleOneOf.get('type'); + const originalParserOptions = assetRuleOneOf.get('parser'); + const originalGeneratorOptions = assetRuleOneOf.get('generator'); + + const generatorOptions = isUserSetPublicPath + ? originalGeneratorOptions + : { + ...originalGeneratorOptions, + importMode: 'preserve', + }; + + const rule = config.module.rule(ruleId); + rule.oneOf(oneOfId).generator(generatorOptions).issuer({ + not: CSS_EXTENSIONS_PATTERN, + }); + + rule + .oneOf(`${oneOfId}-for-css`) + .type(originalTypeOptions) + .parser(originalParserOptions) + .generator(originalGeneratorOptions) + .issuer(CSS_EXTENSIONS_PATTERN); + } + + // for svgr + // 1. remove __webpack_require__.p in svgr url-loader and file-loader + const isUsingSvgr = Boolean( + config.module + .rule(CHAIN_ID.RULE.SVG) + .oneOf(CHAIN_ID.RULE.SVG) + .uses.has(CHAIN_ID.USE.SVGR), + ); + if (isUsingSvgr) { + const urlLoaderRule = config.module + .rule(CHAIN_ID.RULE.SVG) + .oneOf(CHAIN_ID.ONE_OF.SVG) + .use(CHAIN_ID.USE.URL); + + const originalOptions = urlLoaderRule.get('options'); + + urlLoaderRule.options({ + ...originalOptions, + publicPath: (url: string) => `${PUBLIC_PATH_PLACEHOLDER}${url}`, + }); + config.plugin(LibSvgrPatchPlugin.name).use(LibSvgrPatchPlugin, []); + } + // 2. in bundleless, only support transform the svg asset to mixedImport svgr file + // remove issuer to make every svg asset is transformed + if (!bundle) { + if (isUsingSvgr) { + const rule = config.module + .rule(CHAIN_ID.RULE.SVG) + .oneOf(CHAIN_ID.ONE_OF.SVG); + rule.issuer([]); + } + } + + // css-asset + // preserve './' in css url + // in bundleless, we set this in libCssExtractLoader + // in bundle, we set this by https://github.com/web-infra-dev/rspack/pull/8946 + if (bundle) { + config.plugins.get(CHAIN_ID.PLUGIN.MINI_CSS_EXTRACT)?.tap((options) => { + return [ + { + ...options[0], + enforceRelative: true, + }, + ]; + }); + } + }); + }, +}); // TODO: asset config document export const composeAssetConfig = ( @@ -11,16 +152,17 @@ export const composeAssetConfig = ( return { output: { dataUriLimit: 0, // default: no inline asset - // assetPrefix: 'auto', // TODO: will turn on this with js support together in the future + assetPrefix: 'auto', }, + plugins: [pluginLibAsset({ bundle: true })], }; } - return { output: { dataUriLimit: 0, // default: no inline asset - // assetPrefix: 'auto', // TODO: will turn on this with js support together in the future + assetPrefix: 'auto', }, + plugins: [pluginLibAsset({ bundle: false })], }; } diff --git a/packages/core/src/config.ts b/packages/core/src/config.ts index 2fe97babd..9e4282e7a 100644 --- a/packages/core/src/config.ts +++ b/packages/core/src/config.ts @@ -17,7 +17,7 @@ import { composeAssetConfig } from './asset/assetConfig'; import { DEFAULT_CONFIG_EXTENSIONS, DEFAULT_CONFIG_NAME, - ENTRY_EXTENSIONS_PATTERN, + DTS_EXTENSIONS_PATTERN, JS_EXTENSIONS_PATTERN, RSLIB_ENTRY_QUERY, SWC_HELPERS, @@ -990,9 +990,9 @@ const composeEntryConfig = async ( }); // Filter the glob resolved entry files based on the allowed extensions - const resolvedEntryFiles = globEntryFiles.filter((file) => - ENTRY_EXTENSIONS_PATTERN.test(file), - ); + const resolvedEntryFiles = globEntryFiles.filter((i) => { + return !DTS_EXTENSIONS_PATTERN.test(i); + }); if (resolvedEntryFiles.length === 0) { throw new Error(`Cannot find ${resolvedEntryFiles}`); @@ -1070,6 +1070,7 @@ const composeBundlelessExternalConfig = ( const styleRedirectExtension = redirect.style?.extension ?? true; const jsRedirectPath = redirect.js?.path ?? true; const jsRedirectExtension = redirect.js?.extension ?? true; + const assetRedirect = redirect.asset ?? true; let resolver: RspackResolver | undefined; @@ -1143,6 +1144,7 @@ const composeBundlelessExternalConfig = ( styleRedirectPath, styleRedirectExtension, redirectPath, + issuer, ); if (cssExternal !== false) { @@ -1163,20 +1165,33 @@ const composeBundlelessExternalConfig = ( // If data.request already have an extension, we replace it with new extension // This may result in a change in semantics, // user should use copy to keep origin file or use another separate entry to deal this - if (jsRedirectExtension && resolvedRequest.startsWith('.')) { + if (resolvedRequest.startsWith('.')) { const ext = extname(resolvedRequest); + if (ext) { + // 1. js files hit JS_EXTENSIONS_PATTERN, ./foo.ts -> ./foo.mjs if (JS_EXTENSIONS_PATTERN.test(resolvedRequest)) { - resolvedRequest = resolvedRequest.replace( - /\.[^.]+$/, - jsExtension, - ); + if (jsRedirectExtension) { + resolvedRequest = resolvedRequest.replace( + /\.[^.]+$/, + jsExtension, + ); + } } else { - // If it does not match jsExtensionsPattern, we should do nothing, eg: ./foo.png - return callback(); + // 2. asset files, does not match jsExtensionsPattern, eg: ./foo.png -> ./foo.mjs + // non-js && non-css files + if (assetRedirect) { + resolvedRequest = resolvedRequest.replace( + /\.[^.]+$/, + jsExtension, + ); + } } } else { - resolvedRequest = `${resolvedRequest}${jsExtension}`; + // 1. js files hit JS_EXTENSIONS_PATTERN,./foo ->./foo.mjs + if (jsRedirectExtension) { + resolvedRequest = `${resolvedRequest}${jsExtension}`; + } } } diff --git a/packages/core/src/constant.ts b/packages/core/src/constant.ts index 85913bd83..a05f947bf 100644 --- a/packages/core/src/constant.ts +++ b/packages/core/src/constant.ts @@ -16,6 +16,8 @@ export const SHEBANG_REGEX: RegExp = /#!.*[\s\n\r]*$/; export const REACT_DIRECTIVE_REGEX: RegExp = /^['"]use (client|server)['"](;?)[\s\n\r]*$/; +const DTS_EXTENSIONS: string[] = ['d.ts', 'd.mts', 'd.cts']; + const JS_EXTENSIONS: string[] = [ 'js', 'mjs', @@ -33,11 +35,6 @@ const JS_EXTENSIONS: string[] = [ const CSS_EXTENSIONS: string[] = ['css', 'sass', 'scss', 'less'] as const; -const ENTRY_EXTENSIONS: string[] = [ - ...JS_EXTENSIONS, - ...CSS_EXTENSIONS, -] as const; - export const JS_EXTENSIONS_PATTERN: RegExp = new RegExp( `\\.(${JS_EXTENSIONS.join('|')})$`, ); @@ -46,6 +43,6 @@ export const CSS_EXTENSIONS_PATTERN: RegExp = new RegExp( `\\.(${CSS_EXTENSIONS.join('|')})$`, ); -export const ENTRY_EXTENSIONS_PATTERN: RegExp = new RegExp( - `\\.(${ENTRY_EXTENSIONS.join('|')})$`, +export const DTS_EXTENSIONS_PATTERN: RegExp = new RegExp( + `\\.(${DTS_EXTENSIONS.join('|')})$`, ); diff --git a/packages/core/src/css/LibCssExtractPlugin.ts b/packages/core/src/css/LibCssExtractPlugin.ts index d4588c63b..077d06db5 100644 --- a/packages/core/src/css/LibCssExtractPlugin.ts +++ b/packages/core/src/css/LibCssExtractPlugin.ts @@ -3,6 +3,7 @@ import { RSLIB_CSS_ENTRY_FLAG } from './cssConfig'; import { ABSOLUTE_PUBLIC_PATH, AUTO_PUBLIC_PATH, + BASE_URI, SINGLE_DOT_PATH_SEGMENT, } from './libCssExtractLoader'; import { getUndoPath } from './utils'; @@ -62,14 +63,17 @@ class LibCssExtractPlugin implements Rspack.RspackPluginInstance { } } - replace(ABSOLUTE_PUBLIC_PATH, ''); replace(SINGLE_DOT_PATH_SEGMENT, '.'); const undoPath = getUndoPath( name, compilation.outputOptions.path!, - false, + // preserve './' in css url + // https://github.com/web-infra-dev/rspack/pull/8946 + true, ); - replace(AUTO_PUBLIC_PATH, undoPath); + replace(`${ABSOLUTE_PUBLIC_PATH}${AUTO_PUBLIC_PATH}`, undoPath); + replace(ABSOLUTE_PUBLIC_PATH, ''); + replace(`${BASE_URI}/`, ''); return replaceSource; }); diff --git a/packages/core/src/css/cssConfig.ts b/packages/core/src/css/cssConfig.ts index f5a93aab7..7f057d7dd 100644 --- a/packages/core/src/css/cssConfig.ts +++ b/packages/core/src/css/cssConfig.ts @@ -87,9 +87,10 @@ export async function cssExternalHandler( styleRedirectPath: boolean, styleRedirectExtension: boolean, redirectPath: (request: string) => Promise, + issuer: string, ): Promise { - // cssExtract would execute the file handled by css-loader, so we cannot external the "helper import" from css-loader - // do not external @rsbuild/core/compiled/css-loader/noSourceMaps.js, sourceMaps.js, api.mjs etc. + // cssExtract: do not external @rsbuild/core/compiled/css-loader/noSourceMaps.js, sourceMaps.js, api.mjs etc. + // cssExtract would execute the result handled by css-loader with importModule, so we cannot external the "helper import" from css-loader if (/compiled\/css-loader\//.test(request)) { return callback(); } @@ -104,6 +105,10 @@ export async function cssExternalHandler( } if (!isCssFile(resolvedRequest)) { + // cssExtract: do not external assets module import + if (isCssFile(issuer)) { + return callback(); + } return false; } diff --git a/packages/core/src/types/config.ts b/packages/core/src/types/config.ts index 96e14f4d6..f183458d8 100644 --- a/packages/core/src/types/config.ts +++ b/packages/core/src/types/config.ts @@ -188,8 +188,8 @@ export type Redirect = { js?: JsRedirect; /** Controls the redirect of the import paths of output style files. */ style?: StyleRedirect; - // TODO: support other redirects - // asset?: boolean; + /** Controls the redirect of the import paths of output asset files. */ + asset?: boolean; // dts?: DtsRedirect; }; diff --git a/packages/core/tests/__snapshots__/config.test.ts.snap b/packages/core/tests/__snapshots__/config.test.ts.snap index 19dae61ba..5b9221534 100644 --- a/packages/core/tests/__snapshots__/config.test.ts.snap +++ b/packages/core/tests/__snapshots__/config.test.ts.snap @@ -8,6 +8,7 @@ exports[`Should compose create Rsbuild config correctly > Merge Rsbuild config i "progressBar": false, }, "output": { + "assetPrefix": "auto", "dataUriLimit": 0, "distPath": { "css": "./", @@ -113,6 +114,13 @@ exports[`Should compose create Rsbuild config correctly > Merge Rsbuild config i "name": "rsbuild:format", "setup": [Function], }, + { + "name": "rsbuild:lib-asset", + "pre": [ + "rsbuild:svgr", + ], + "setup": [Function], + }, { "name": "rsbuild:lib-entry-chunk", "setup": [Function], @@ -252,6 +260,7 @@ exports[`Should compose create Rsbuild config correctly > Merge Rsbuild config i "progressBar": false, }, "output": { + "assetPrefix": "auto", "dataUriLimit": 0, "distPath": { "css": "./", @@ -356,6 +365,13 @@ exports[`Should compose create Rsbuild config correctly > Merge Rsbuild config i "name": "rsbuild:cjs-import-meta-url-shim", "setup": [Function], }, + { + "name": "rsbuild:lib-asset", + "pre": [ + "rsbuild:svgr", + ], + "setup": [Function], + }, { "name": "rsbuild:lib-entry-chunk", "setup": [Function], diff --git a/packages/core/tests/constant.test.ts b/packages/core/tests/constant.test.ts index 5522c2ce6..d9fdf4ee7 100644 --- a/packages/core/tests/constant.test.ts +++ b/packages/core/tests/constant.test.ts @@ -1,7 +1,7 @@ import { expect, test } from 'vitest'; import { CSS_EXTENSIONS_PATTERN, - ENTRY_EXTENSIONS_PATTERN, + DTS_EXTENSIONS_PATTERN, JS_EXTENSIONS_PATTERN, } from '../src/constant'; @@ -27,6 +27,17 @@ const cssTestStrings = [ { str: '/Users/path/index.sass', expected: true }, ]; +const dtsTestStrings = [ + { str: 'index.js', expected: false }, + { str: './index.ts', expected: false }, + { str: './index.d.ts', expected: true }, + { str: '/Users/path/index.ts', expected: false }, + { str: '/Users/path/index.d.ts', expected: true }, + { str: '/Users/path/index.d.mts', expected: true }, + { str: '/Users/path/index.d.cts', expected: true }, + { str: '/Users/path/index.tsx', expected: false }, +]; + test('JS_EXTENSIONS_PATTERN', () => { for (const { str, expected } of jsTestStrings) { expect(JS_EXTENSIONS_PATTERN.test(str)).toBe(expected); @@ -39,8 +50,8 @@ test('CSS_EXTENSIONS_PATTERN', () => { } }); -test('ENTRY_EXTENSIONS_PATTERN', () => { - for (const { str, expected } of [...jsTestStrings, ...cssTestStrings]) { - expect(ENTRY_EXTENSIONS_PATTERN.test(str)).toBe(expected); +test('DTS_EXTENSIONS_PATTERN', () => { + for (const { str, expected } of dtsTestStrings) { + expect(DTS_EXTENSIONS_PATTERN.test(str)).toBe(expected); } }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3206fb6be..f4e26527a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -459,9 +459,9 @@ importers: tests/integration/alias: {} - tests/integration/asset/limit: {} + tests/integration/asset/assets-include: {} - tests/integration/asset/name: + tests/integration/asset/hash: dependencies: react: specifier: ^19.0.0 @@ -471,10 +471,16 @@ importers: specifier: ^1.1.0 version: 1.1.0(@rsbuild/core@1.2.0) + tests/integration/asset/json: {} + + tests/integration/asset/limit: {} + tests/integration/asset/path: {} tests/integration/asset/public-path: {} + tests/integration/asset/source: {} + tests/integration/asset/svgr: devDependencies: '@rsbuild/plugin-react': @@ -757,6 +763,8 @@ importers: specifier: ^0.11.0 version: 0.11.0(@babel/core@7.26.0) + tests/integration/redirect/asset: {} + tests/integration/redirect/js: devDependencies: '@types/lodash': @@ -808,6 +816,8 @@ importers: tests/integration/sourcemap/inline: {} + tests/integration/style/asset: {} + tests/integration/style/css-modules/bundle: {} tests/integration/style/css-modules/bundle-false: {} diff --git a/tests/e2e/react-component/index.pw.test.ts b/tests/e2e/react-component/index.pw.test.ts index ff618c545..ad9f8ad05 100644 --- a/tests/e2e/react-component/index.pw.test.ts +++ b/tests/e2e/react-component/index.pw.test.ts @@ -40,7 +40,15 @@ async function assetShouldWork(page: Page) { assert(h1El); expect(h1El).toHaveCSS('background', /static\/svg\/logo/); - // TODO: asset in js + // asset by import url from './assets/logo.svg' + const imgEls = await page.$$('.counter-button>img'); + expect(imgEls).toHaveLength(2); + const srcList = await Promise.all( + imgEls.map((imgEl) => imgEl.getAttribute('src')), + ); + for (const src of srcList) { + expect(src).toMatch(/static\/svg\/logo/); + } } test('should render example "react-component-bundle" successfully', async ({ diff --git a/tests/integration/asset/__snapshots__/index.test.ts.snap b/tests/integration/asset/__snapshots__/index.test.ts.snap index 50129058c..4193dd100 100644 --- a/tests/integration/asset/__snapshots__/index.test.ts.snap +++ b/tests/integration/asset/__snapshots__/index.test.ts.snap @@ -1,7 +1,45 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html +exports[`use asset/source 1`] = ` +"const draft_namespaceObject = "this is a txt file\\nthis is a txt file\\n"; +console.log(draft_namespaceObject); +" +`; + +exports[`use asset/source 2`] = ` +"const draft_rslib_entry_namespaceObject = "this is a txt file\\nthis is a txt file\\n"; +export { draft_rslib_entry_namespaceObject as default }; +" +`; + +exports[`use json 1`] = ` +"JSON.parse('{"foo":1,"bar":["2"]}'); +" +`; + +exports[`use json 2`] = ` +"var data_rslib_entry_namespaceObject = JSON.parse('{"foo":1,"bar":["2"]}'); +var __webpack_exports__bar = data_rslib_entry_namespaceObject.bar; +var __webpack_exports__foo = data_rslib_entry_namespaceObject.foo; +export { __webpack_exports__bar as bar, __webpack_exports__foo as foo }; +" +`; + +exports[`use source.assetInclude 1`] = ` +"import draft_namespaceObject from "./static/assets/draft.txt"; +console.log(draft_namespaceObject); +" +`; + +exports[`use source.assetInclude 2`] = ` +"import draft_rslib_entry_namespaceObject from "../static/assets/draft.txt"; +export { draft_rslib_entry_namespaceObject as default }; +" +`; + exports[`use svgr 1`] = ` -"import * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__ from "react/jsx-runtime"; +"import __rslib_svgr_url__0__ from "./static/svg/logo.svg"; +import * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__ from "react/jsx-runtime"; import "react"; const SvgLogo = (props)=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", @@ -25,14 +63,8 @@ const SvgLogo = (props)=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_r }) }); const logoreact = SvgLogo; -console.log(logoreact); -" -`; - -exports[`use svgr 2`] = ` -"import * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__ from "react/jsx-runtime"; -import "react"; -const SvgLogo = (props)=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("svg", { +console.log('queryImport', 'ReactComponent', logoreact); +const logo_SvgLogo = (props)=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 841.9 595.3", ...props, @@ -53,63 +85,106 @@ const SvgLogo = (props)=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_r ] }) }); -const logoreact = SvgLogo; -console.log(logoreact); +const logo = __rslib_svgr_url__0__; +console.log('namedImport', 'ReactComponent', logo_SvgLogo); +console.log('default Import', 'reexport', logo); " `; -exports[`use svgr 3`] = ` -"import * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__ from "react/jsx-runtime"; -import "react"; -const SvgLogo = (props)=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("svg", { +exports[`use svgr 2`] = ` +""use strict"; +var __webpack_exports__ = {}; +const jsx_runtime_namespaceObject = require("react/jsx-runtime"); +require("react"); +const SvgLogo = (props)=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 841.9 595.3", ...props, - children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("g", { + children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("g", { fill: "#61DAFB", children: [ - /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("path", { + /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("path", { d: "M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3m-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9m-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9m32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1M421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32m-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24q7.05 12 14.4 23.4M420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32m-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9m-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2M310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7m237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1m38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6M320.8 78.4" }), - /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("circle", { + /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("circle", { cx: 420.9, cy: 296.5, r: 45.7 }), - /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("path", { + /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("path", { d: "M520.5 78.1" }) ] }) }); -console.log(SvgLogo); -" -`; - -exports[`use svgr 4`] = ` -"import * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__ from "react/jsx-runtime"; -import "react"; -const SvgLogo = (props)=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("svg", { +const logoreact = SvgLogo; +console.log('queryImport', 'ReactComponent', logoreact); +const logo_SvgLogo = (props)=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 841.9 595.3", ...props, - children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("g", { + children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("g", { fill: "#61DAFB", children: [ - /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("path", { + /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("path", { d: "M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3m-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9m-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9m32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1M421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32m-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24q7.05 12 14.4 23.4M420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32m-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9m-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2M310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7m237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1m38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6M320.8 78.4" }), - /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("circle", { + /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("circle", { cx: 420.9, cy: 296.5, r: 45.7 }), - /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("path", { + /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("path", { d: "M520.5 78.1" }) ] }) }); -console.log(SvgLogo); +const logo = require("./static/svg/logo.svg"); +console.log('namedImport', 'ReactComponent', logo_SvgLogo); +console.log('default Import', 'reexport', logo); +var __webpack_export_target__ = exports; +for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; +if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { + value: true +}); +" +`; + +exports[`use svgr 3`] = ` +"import * as __WEBPACK_EXTERNAL_MODULE__assets_logo_js_450929b7__ from "./assets/logo.js"; +console.log('namedImport', 'ReactComponent', __WEBPACK_EXTERNAL_MODULE__assets_logo_js_450929b7__.ReactComponent); +" +`; + +exports[`use svgr 4`] = ` +"import * as __WEBPACK_EXTERNAL_MODULE__assets_logo_js_450929b7__ from "./assets/logo.js"; +console.log('namedImport', 'ReactComponent', __WEBPACK_EXTERNAL_MODULE__assets_logo_js_450929b7__.ReactComponent); +" +`; + +exports[`use svgr 5`] = ` +""use strict"; +var __webpack_exports__ = {}; +const logo_cjs_namespaceObject = require("./assets/logo.cjs"); +console.log('namedImport', 'ReactComponent', logo_cjs_namespaceObject.ReactComponent); +var __webpack_export_target__ = exports; +for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; +if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { + value: true +}); +" +`; + +exports[`use svgr 6`] = ` +""use strict"; +var __webpack_exports__ = {}; +const logo_cjs_namespaceObject = require("./assets/logo.cjs"); +console.log('namedImport', 'ReactComponent', logo_cjs_namespaceObject.ReactComponent); +var __webpack_export_target__ = exports; +for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; +if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { + value: true +}); " `; diff --git a/tests/integration/asset/assets-include/package.json b/tests/integration/asset/assets-include/package.json new file mode 100644 index 000000000..2fab8c41c --- /dev/null +++ b/tests/integration/asset/assets-include/package.json @@ -0,0 +1,6 @@ +{ + "name": "assets-include-test", + "version": "1.0.0", + "private": true, + "type": "module" +} diff --git a/tests/integration/asset/assets-include/rslib.config.ts b/tests/integration/asset/assets-include/rslib.config.ts new file mode 100644 index 000000000..4589547e3 --- /dev/null +++ b/tests/integration/asset/assets-include/rslib.config.ts @@ -0,0 +1,35 @@ +import { defineConfig } from '@rslib/core'; +import { generateBundleEsmConfig } from 'test-helper'; + +export default defineConfig({ + lib: [ + // 0. bundle + // esm + generateBundleEsmConfig({ + source: { + assetsInclude: /\.txt/, + }, + output: { + distPath: { + root: './dist/esm/bundle', + }, + }, + }), + // 1. bundleless + // esm + generateBundleEsmConfig({ + bundle: false, + source: { + assetsInclude: /\.txt/, + }, + output: { + distPath: { + root: './dist/esm/bundleless', + }, + }, + }), + ], + output: { + target: 'web', + }, +}); diff --git a/tests/integration/asset/assets-include/src/assets/draft.txt b/tests/integration/asset/assets-include/src/assets/draft.txt new file mode 100644 index 000000000..2b740b0ec --- /dev/null +++ b/tests/integration/asset/assets-include/src/assets/draft.txt @@ -0,0 +1,2 @@ +this is a txt file +this is a txt file diff --git a/tests/integration/asset/assets-include/src/index.js b/tests/integration/asset/assets-include/src/index.js new file mode 100644 index 000000000..2c066948e --- /dev/null +++ b/tests/integration/asset/assets-include/src/index.js @@ -0,0 +1,3 @@ +import draft from './assets/draft.txt'; + +console.log(draft); diff --git a/tests/integration/asset/name/package.json b/tests/integration/asset/hash/package.json similarity index 100% rename from tests/integration/asset/name/package.json rename to tests/integration/asset/hash/package.json diff --git a/tests/integration/asset/hash/rslib.config.ts b/tests/integration/asset/hash/rslib.config.ts new file mode 100644 index 000000000..eaeee0e26 --- /dev/null +++ b/tests/integration/asset/hash/rslib.config.ts @@ -0,0 +1,60 @@ +import { pluginReact } from '@rsbuild/plugin-react'; +import { defineConfig } from '@rslib/core'; +import { generateBundleCjsConfig, generateBundleEsmConfig } from 'test-helper'; + +export default defineConfig({ + lib: [ + // 0. bundle default + // esm + generateBundleEsmConfig({ + output: { + distPath: { + root: './dist/esm/bundle', + }, + filename: { + image: '[name].[contenthash:8][ext]', + }, + }, + }), + // cjs + generateBundleCjsConfig({ + output: { + distPath: { + root: './dist/cjs/bundle', + }, + filename: { + image: '[name].[contenthash:8][ext]', + }, + }, + }), + // 1. bundleless default + // esm + generateBundleEsmConfig({ + bundle: false, + output: { + distPath: { + root: './dist/esm/bundleless', + }, + filename: { + image: '[name].[contenthash:8][ext]', + }, + }, + }), + // cjs + generateBundleCjsConfig({ + bundle: false, + output: { + distPath: { + root: './dist/cjs/bundleless', + }, + filename: { + image: '[name].[contenthash:8][ext]', + }, + }, + }), + ], + output: { + target: 'web', + }, + plugins: [pluginReact()], +}); diff --git a/tests/integration/asset/name/assets/image.png b/tests/integration/asset/hash/src/assets/image.png similarity index 100% rename from tests/integration/asset/name/assets/image.png rename to tests/integration/asset/hash/src/assets/image.png diff --git a/tests/integration/asset/name/src/index.jsx b/tests/integration/asset/hash/src/index.jsx similarity index 61% rename from tests/integration/asset/name/src/index.jsx rename to tests/integration/asset/hash/src/index.jsx index d78a7a874..7caafe9ab 100644 --- a/tests/integration/asset/name/src/index.jsx +++ b/tests/integration/asset/hash/src/index.jsx @@ -1,4 +1,4 @@ -import a from '../assets/image.png'; +import a from './assets/image.png'; export default () => { return ; diff --git a/tests/integration/asset/index.test.ts b/tests/integration/asset/index.test.ts index 6bc313b2b..0f0b87298 100644 --- a/tests/integration/asset/index.test.ts +++ b/tests/integration/asset/index.test.ts @@ -1,90 +1,338 @@ import { join } from 'node:path'; -import { buildAndGetResults } from 'test-helper'; +import { buildAndGetResults, queryContent } from 'test-helper'; import { expect, test } from 'vitest'; test('set the size threshold to inline static assets', async () => { const fixturePath = join(__dirname, 'limit'); const { contents } = await buildAndGetResults({ fixturePath }); - // inline when bundle - expect(Object.values(contents.esm0!)[0]).toContain( - 'const logo_namespaceObject = "data:image/svg+xml;base64', + // 0. bundle default + // esm + const { content: indexJs0 } = queryContent(contents.esm0!, /index\.js/); + expect(indexJs0).toContain( + 'import logo_namespaceObject from "./static/svg/logo.svg";', ); - - // external when bundle - expect(Object.values(contents.esm1!)[0]).toContain( - 'const logo_namespaceObject = __webpack_require__.p + "static/svg/logo.svg";', + // cjs + const { content: indexCjs0 } = queryContent(contents.cjs0!, /index\.cjs/); + expect(indexCjs0).toContain( + 'const logo_namespaceObject = require("./static/svg/logo.svg");', ); - // inline bundleless - expect(Object.values(contents.esm2!)[0]).toContain( + // 1. bundle inline + // esm + const { content: indexJs1 } = queryContent(contents.esm1!, /index\.js/); + expect(indexJs1).toContain( + 'const logo_namespaceObject = "data:image/svg+xml;base64', + ); + // cjs + const { content: indexCjs1 } = queryContent(contents.cjs1!, /index\.cjs/); + expect(indexCjs1).toContain( 'const logo_namespaceObject = "data:image/svg+xml;base64', ); - // external bundleless - expect(Object.values(contents.esm3!)[0]).toContain( - 'const logo_namespaceObject = __webpack_require__.p + "static/svg/logo.svg";', + // 2. bundleless esm default + // esm + const { content: indexJs2 } = queryContent(contents.esm2!, /index\.js/); + const { content: logoJs2 } = queryContent(contents.esm2!, /assets\/logo\.js/); + expect(indexJs2).toMatchInlineSnapshot(` + "import * as __WEBPACK_EXTERNAL_MODULE__assets_logo_js_450929b7__ from "./assets/logo.js"; + const src_rslib_entry_ = __WEBPACK_EXTERNAL_MODULE__assets_logo_js_450929b7__["default"]; + export { src_rslib_entry_ as default }; + " + `); + expect(logoJs2).toMatchInlineSnapshot(` + "import logo_rslib_entry_namespaceObject from "../static/svg/logo.svg"; + export { logo_rslib_entry_namespaceObject as default }; + " + `); + // cjs + const { content: indexCjs2 } = queryContent(contents.cjs2!, /index\.cjs/); + const { content: logoCjs2 } = queryContent( + contents.cjs2!, + /assets\/logo\.cjs/, ); + expect(indexCjs2).toContain( + 'const logo_cjs_namespaceObject = require("./assets/logo.cjs");', + ); + expect(logoCjs2).toMatchInlineSnapshot(` + ""use strict"; + var __webpack_modules__ = { + "./src/assets/logo.svg?__rslib_entry__": function(module) { + module.exports = require("../static/svg/logo.svg"); + } + }; + var __webpack_module_cache__ = {}; + function __webpack_require__(moduleId) { + var cachedModule = __webpack_module_cache__[moduleId]; + if (void 0 !== cachedModule) return cachedModule.exports; + var module = __webpack_module_cache__[moduleId] = { + exports: {} + }; + __webpack_modules__[moduleId](module, module.exports, __webpack_require__); + return module.exports; + } + var __webpack_exports__ = __webpack_require__("./src/assets/logo.svg?__rslib_entry__"); + var __webpack_export_target__ = exports; + for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; + if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { + value: true + }); + " + `); }); -test('set the assets name', async () => { - const fixturePath = join(__dirname, 'name'); +test('set the assets filename with hash', async () => { + const fixturePath = join(__dirname, 'hash'); const { contents } = await buildAndGetResults({ fixturePath }); - - // bundle - expect(Object.values(contents.esm0!)[0]).toContain( - 'const image_namespaceObject = __webpack_require__.p + "static/image/image.c74653c1.png";', + // 0. bundle default + // esm + const { content: indexJs0 } = queryContent(contents.esm0!, /index\.js/); + expect(indexJs0).toContain( + 'import image_namespaceObject from "./static/image/image.c74653c1.png";', + ); + // cjs + const { content: indexCjs0 } = queryContent(contents.cjs0!, /index\.cjs/); + expect(indexCjs0).toContain( + 'const image_namespaceObject = require("./static/image/image.c74653c1.png");', ); - // bundleless - expect(Object.values(contents.esm1!)[0]).toContain( - 'const image_namespaceObject = __webpack_require__.p + "static/image/image.c74653c1712618b1.png";', + // 1. bundleless default + // esm + const { content: imageJs1 } = queryContent( + contents.esm1!, + /assets\/image\.js/, ); + expect(imageJs1).toMatchInlineSnapshot(` + "import image_rslib_entry_namespaceObject from "../static/image/image.c74653c1.png"; + export { image_rslib_entry_namespaceObject as default }; + " + `); + // cjs + const { content: imageCjs1 } = queryContent( + contents.cjs1!, + /assets\/image\.cjs/, + ); + expect(imageCjs1).toMatchInlineSnapshot(` + ""use strict"; + var __webpack_modules__ = { + "./src/assets/image.png?__rslib_entry__": function(module) { + module.exports = require("../static/image/image.c74653c1.png"); + } + }; + var __webpack_module_cache__ = {}; + function __webpack_require__(moduleId) { + var cachedModule = __webpack_module_cache__[moduleId]; + if (void 0 !== cachedModule) return cachedModule.exports; + var module = __webpack_module_cache__[moduleId] = { + exports: {} + }; + __webpack_modules__[moduleId](module, module.exports, __webpack_require__); + return module.exports; + } + var __webpack_exports__ = __webpack_require__("./src/assets/image.png?__rslib_entry__"); + var __webpack_export_target__ = exports; + for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; + if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { + value: true + }); + " + `); }); test('set the assets output path', async () => { const fixturePath = join(__dirname, 'path'); const { contents } = await buildAndGetResults({ fixturePath }); - - // bundle - expect(Object.values(contents.esm0!)[0]).toContain( - 'const image_namespaceObject = __webpack_require__.p + "assets/bundle/image.png";', + // 0. bundle default + // esm + const { content: indexJs0 } = queryContent(contents.esm0!, /index\.js/); + expect(indexJs0).toContain( + 'import image_namespaceObject from "./assets/bundle/image.png";', + ); + // cjs + const { content: indexCjs0 } = queryContent(contents.cjs0!, /index\.cjs/); + expect(indexCjs0).toContain( + 'const image_namespaceObject = require("./assets/bundle/image.png");', ); - // bundleless - expect(Object.values(contents.esm1!)[0]).toContain( - 'const image_namespaceObject = __webpack_require__.p + "assets/bundleless/image.png";', + // 1. bundleless default + // esm + const { content: imageJs1 } = queryContent( + contents.esm1!, + /assets\/image\.js/, + ); + expect(imageJs1).toMatchInlineSnapshot(` + "import image_rslib_entry_namespaceObject from "../assets/bundleless/image.png"; + export { image_rslib_entry_namespaceObject as default }; + " + `); + // cjs + const { content: imageCjs1 } = queryContent( + contents.cjs1!, + /assets\/image\.cjs/, ); + expect(imageCjs1).toMatchInlineSnapshot(` + ""use strict"; + var __webpack_modules__ = { + "./src/assets/image.png?__rslib_entry__": function(module) { + module.exports = require("../assets/bundleless/image.png"); + } + }; + var __webpack_module_cache__ = {}; + function __webpack_require__(moduleId) { + var cachedModule = __webpack_module_cache__[moduleId]; + if (void 0 !== cachedModule) return cachedModule.exports; + var module = __webpack_module_cache__[moduleId] = { + exports: {} + }; + __webpack_modules__[moduleId](module, module.exports, __webpack_require__); + return module.exports; + } + var __webpack_exports__ = __webpack_require__("./src/assets/image.png?__rslib_entry__"); + var __webpack_export_target__ = exports; + for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; + if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { + value: true + }); + " + `); }); test('set the assets public path', async () => { const fixturePath = join(__dirname, 'public-path'); const { contents } = await buildAndGetResults({ fixturePath }); - // bundle - expect(Object.values(contents.esm0!)[0]).toContain( - '__webpack_require__.p = "/public/path/bundle/";', + // 1. umd should preserve '__webpack_require__.p' + const { content: indexUmdJs } = queryContent(contents.umd!, /index\.js/); + + expect(indexUmdJs).toContain('__webpack_require__.p = "/public/path/";'); + expect(indexUmdJs).toContain( + 'const image_namespaceObject = __webpack_require__.p + "static/image/image.png";', ); - // bundleless - expect(Object.values(contents.esm1!)[0]).toContain( - '__webpack_require__.p = "/public/path/bundleless/";', + // 2. bundle + // esm + const { content: indexJs } = queryContent(contents.esm0!, /index\.js/); + expect(indexJs).toMatchInlineSnapshot(` + "var __webpack_module_cache__ = {}; + function __webpack_require__(moduleId) { + var cachedModule = __webpack_module_cache__[moduleId]; + if (void 0 !== cachedModule) return cachedModule.exports; + var module = __webpack_module_cache__[moduleId] = { + exports: {} + }; + __webpack_modules__[moduleId](module, module.exports, __webpack_require__); + return module.exports; + } + (()=>{ + __webpack_require__.p = "/public/path/"; + })(); + const image_namespaceObject = __webpack_require__.p + "static/image/image.png"; + const src = image_namespaceObject; + export { src as default }; + " + `); + + // 3. bundleless + // esm + const { content: imageJs } = queryContent( + contents.esm1!, + /assets\/image\.js/, ); + expect(imageJs).toMatchInlineSnapshot(` + "var __webpack_module_cache__ = {}; + function __webpack_require__(moduleId) { + var cachedModule = __webpack_module_cache__[moduleId]; + if (void 0 !== cachedModule) return cachedModule.exports; + var module = __webpack_module_cache__[moduleId] = { + exports: {} + }; + __webpack_modules__[moduleId](module, module.exports, __webpack_require__); + return module.exports; + } + (()=>{ + __webpack_require__.p = "/public/path/"; + })(); + const image_rslib_entry_namespaceObject = __webpack_require__.p + "static/image/image.png"; + export { image_rslib_entry_namespaceObject as default }; + " + `); +}); + +test('use json', async () => { + const fixturePath = join(__dirname, 'json'); + const { contents } = await buildAndGetResults({ fixturePath }); + + // 0. bundle + // esm + const { content: indexJs } = queryContent(contents.esm0!, /index\.js/); + expect(indexJs).matchSnapshot(); + // 1. bundleless + // esm + const { content: dataJs } = queryContent(contents.esm1!, /assets\/data\.js/); + expect(dataJs).matchSnapshot(); }); test('use svgr', async () => { const fixturePath = join(__dirname, 'svgr'); const { contents } = await buildAndGetResults({ fixturePath }); - // bundle -- default export with react query - expect(Object.values(contents.esm0!)[0]).toMatchSnapshot(); + // 0. bundle + // esm + const { content: indexJs } = queryContent(contents.esm0!, /index\.js/); + expect(indexJs).matchSnapshot(); + // cjs + const { content: indexCjs } = queryContent(contents.cjs0!, /index\.cjs/); + expect(indexCjs).matchSnapshot(); - // bundleless -- default export with react query - expect(Object.values(contents.esm1!)[0]).toMatchSnapshot(); + // 1. bundleless + // esm + const { content: namedImportJs } = queryContent( + contents.esm1!, + /namedImport\.js/, + ); + expect(namedImportJs).toMatchSnapshot(); + const { content: defaultImportJs } = queryContent( + contents.esm1!, + /namedImport\.js/, + ); + expect(defaultImportJs).toMatchSnapshot(); + // cjs + const { content: namedImportCjs } = queryContent( + contents.cjs1!, + /namedImport\.cjs/, + ); + expect(namedImportCjs).toMatchSnapshot(); + const { content: defaultImportCjs } = queryContent( + contents.cjs1!, + /namedImport\.cjs/, + ); + expect(defaultImportCjs).toMatchSnapshot(); +}); + +test('use asset/source', async () => { + const fixturePath = join(__dirname, 'source'); + const { contents } = await buildAndGetResults({ fixturePath }); - // bundle -- named export - expect(Object.values(contents.esm2!)[0]).toMatchSnapshot(); + // 0. bundle + // esm + const { content: indexJs } = queryContent(contents.esm0!, /index\.js/); + expect(indexJs).matchSnapshot(); + // 1. bundleless + // esm + const { content: dataJs } = queryContent(contents.esm1!, /assets\/draft\.js/); + expect(dataJs).matchSnapshot(); +}); + +test('use source.assetInclude', async () => { + const fixturePath = join(__dirname, 'assets-include'); + const { contents } = await buildAndGetResults({ fixturePath }); - // bundleless -- named export - expect(Object.values(contents.esm3!)[0]).toMatchSnapshot(); + // 0. bundle + // esm + const { content: indexJs } = queryContent(contents.esm0!, /index\.js/); + expect(indexJs).matchSnapshot(); + // 1. bundleless + // esm + const { content: dataJs } = queryContent(contents.esm1!, /assets\/draft\.js/); + expect(dataJs).matchSnapshot(); }); diff --git a/tests/integration/asset/json/package.json b/tests/integration/asset/json/package.json new file mode 100644 index 000000000..55a5fb838 --- /dev/null +++ b/tests/integration/asset/json/package.json @@ -0,0 +1,6 @@ +{ + "name": "asset-types-test", + "version": "1.0.0", + "private": true, + "type": "module" +} diff --git a/tests/integration/asset/name/rslib.config.ts b/tests/integration/asset/json/rslib.config.ts similarity index 80% rename from tests/integration/asset/name/rslib.config.ts rename to tests/integration/asset/json/rslib.config.ts index 0a70ba02e..37cc90927 100644 --- a/tests/integration/asset/name/rslib.config.ts +++ b/tests/integration/asset/json/rslib.config.ts @@ -1,9 +1,10 @@ -import { pluginReact } from '@rsbuild/plugin-react'; import { defineConfig } from '@rslib/core'; import { generateBundleEsmConfig } from 'test-helper'; export default defineConfig({ lib: [ + // 0. bundle default + // esm generateBundleEsmConfig({ output: { distPath: { @@ -14,6 +15,9 @@ export default defineConfig({ }, }, }), + + // 1. bundleless default + // esm generateBundleEsmConfig({ bundle: false, output: { @@ -26,13 +30,7 @@ export default defineConfig({ }, }), ], - source: { - entry: { - index: './src/index.jsx', - }, - }, output: { target: 'web', }, - plugins: [pluginReact()], }); diff --git a/tests/integration/asset/json/src/assets/data.json b/tests/integration/asset/json/src/assets/data.json new file mode 100644 index 000000000..5743be16e --- /dev/null +++ b/tests/integration/asset/json/src/assets/data.json @@ -0,0 +1,4 @@ +{ + "foo": 1, + "bar": ["2"] +} diff --git a/tests/integration/asset/json/src/index.js b/tests/integration/asset/json/src/index.js new file mode 100644 index 000000000..c14c58d2a --- /dev/null +++ b/tests/integration/asset/json/src/index.js @@ -0,0 +1,3 @@ +import a from './assets/data.json'; + +a; diff --git a/tests/integration/asset/limit/rslib.config.ts b/tests/integration/asset/limit/rslib.config.ts index f472330cf..12aa98e32 100644 --- a/tests/integration/asset/limit/rslib.config.ts +++ b/tests/integration/asset/limit/rslib.config.ts @@ -1,50 +1,92 @@ import { defineConfig } from '@rslib/core'; -import { generateBundleEsmConfig } from 'test-helper'; +import { generateBundleCjsConfig, generateBundleEsmConfig } from 'test-helper'; export default defineConfig({ lib: [ + // 0. bundle default + // esm generateBundleEsmConfig({ output: { distPath: { - root: './dist/esm/inline', + root: './dist/esm/bundle-default', + }, + }, + }), + // cjs + generateBundleCjsConfig({ + output: { + distPath: { + root: './dist/cjs/bundle-default', + }, + }, + }), + // 1. bundle inline + // esm + generateBundleEsmConfig({ + output: { + distPath: { + root: './dist/esm/bundle-inline', + }, + dataUriLimit: { + svg: 4096, + }, + }, + }), + // cjs + generateBundleCjsConfig({ + output: { + distPath: { + root: './dist/cjs/bundle-inline', }, dataUriLimit: { svg: 4096, }, }, }), + // 2. bundleless default + // esm generateBundleEsmConfig({ + bundle: false, + output: { + distPath: { + root: './dist/esm/bundleless-default', + }, + }, + }), + // cjs + generateBundleCjsConfig({ + bundle: false, output: { distPath: { - root: './dist/esm/external', + root: './dist/cjs/bundleless-default', }, }, }), + + // 3. bundleless esm inline generateBundleEsmConfig({ bundle: false, output: { distPath: { - root: './dist/esm/inline-bundleless', + root: './dist/esm/bundleless-inline', }, dataUriLimit: { svg: 4096, }, }, }), - generateBundleEsmConfig({ + generateBundleCjsConfig({ bundle: false, output: { distPath: { - root: './dist/esm/external-bundleless', + root: './dist/cjs/bundleless-inline', + }, + dataUriLimit: { + svg: 4096, }, }, }), ], - source: { - entry: { - index: './src/index.js', - }, - }, output: { target: 'web', }, diff --git a/tests/integration/asset/public-path/assets/logo.svg b/tests/integration/asset/limit/src/assets/logo.svg similarity index 100% rename from tests/integration/asset/public-path/assets/logo.svg rename to tests/integration/asset/limit/src/assets/logo.svg diff --git a/tests/integration/asset/limit/src/index.js b/tests/integration/asset/limit/src/index.js index 76ad10053..3ec3a7c2a 100644 --- a/tests/integration/asset/limit/src/index.js +++ b/tests/integration/asset/limit/src/index.js @@ -1,3 +1,3 @@ -import logo from '../assets/logo.svg'; +import logo from './assets/logo.svg'; export default logo; diff --git a/tests/integration/asset/path/rslib.config.ts b/tests/integration/asset/path/rslib.config.ts index 5881be935..58585904c 100644 --- a/tests/integration/asset/path/rslib.config.ts +++ b/tests/integration/asset/path/rslib.config.ts @@ -1,8 +1,10 @@ import { defineConfig } from '@rslib/core'; -import { generateBundleEsmConfig } from 'test-helper'; +import { generateBundleCjsConfig, generateBundleEsmConfig } from 'test-helper'; export default defineConfig({ lib: [ + // 0. bundle + // esm generateBundleEsmConfig({ output: { distPath: { @@ -11,6 +13,16 @@ export default defineConfig({ }, }, }), + generateBundleCjsConfig({ + output: { + distPath: { + root: './dist/cjs/bundle', + image: 'assets/bundle', + }, + }, + }), + // 1. bundleless + // esm generateBundleEsmConfig({ bundle: false, output: { @@ -20,12 +32,16 @@ export default defineConfig({ }, }, }), + generateBundleCjsConfig({ + bundle: false, + output: { + distPath: { + root: './dist/cjs/bundleless', + image: 'assets/bundleless', + }, + }, + }), ], - source: { - entry: { - index: './src/index.js', - }, - }, output: { target: 'web', }, diff --git a/tests/integration/asset/path/assets/image.png b/tests/integration/asset/path/src/assets/image.png similarity index 100% rename from tests/integration/asset/path/assets/image.png rename to tests/integration/asset/path/src/assets/image.png diff --git a/tests/integration/asset/path/src/index.js b/tests/integration/asset/path/src/index.js index 206c64540..b6e29ee81 100644 --- a/tests/integration/asset/path/src/index.js +++ b/tests/integration/asset/path/src/index.js @@ -1,3 +1,3 @@ -import a from '../assets/image.png'; +import a from './assets/image.png'; export default a; diff --git a/tests/integration/asset/public-path/rslib.config.ts b/tests/integration/asset/public-path/rslib.config.ts index cb025d05a..41c16ccad 100644 --- a/tests/integration/asset/public-path/rslib.config.ts +++ b/tests/integration/asset/public-path/rslib.config.ts @@ -1,37 +1,31 @@ import { defineConfig } from '@rslib/core'; -import { generateBundleEsmConfig } from 'test-helper'; +import { generateBundleEsmConfig, generateBundleUmdConfig } from 'test-helper'; export default defineConfig({ lib: [ + generateBundleUmdConfig({ + output: { + assetPrefix: '/public/path', + }, + }), generateBundleEsmConfig({ output: { distPath: { root: './dist/esm/bundle', }, - assetPrefix: '/public/path/bundle', - dataUriLimit: { - svg: 0, - }, + assetPrefix: '/public/path', }, }), generateBundleEsmConfig({ bundle: false, output: { distPath: { - root: './dist/esm/bundleless', - }, - assetPrefix: '/public/path/bundleless', - dataUriLimit: { - svg: 0, + root: './dist/esm/bundle-false', }, + assetPrefix: '/public/path', }, }), ], - source: { - entry: { - index: './src/index.js', - }, - }, output: { target: 'web', }, diff --git a/tests/integration/bundle-false/asset/assets/image.png b/tests/integration/asset/public-path/src/assets/image.png similarity index 100% rename from tests/integration/bundle-false/asset/assets/image.png rename to tests/integration/asset/public-path/src/assets/image.png diff --git a/tests/integration/asset/public-path/src/index.js b/tests/integration/asset/public-path/src/index.js index 76ad10053..b17f08316 100644 --- a/tests/integration/asset/public-path/src/index.js +++ b/tests/integration/asset/public-path/src/index.js @@ -1,3 +1,3 @@ -import logo from '../assets/logo.svg'; +import logo from './assets/image.png'; export default logo; diff --git a/tests/integration/asset/source/package.json b/tests/integration/asset/source/package.json new file mode 100644 index 000000000..d141816b6 --- /dev/null +++ b/tests/integration/asset/source/package.json @@ -0,0 +1,6 @@ +{ + "name": "assets-source-test", + "version": "1.0.0", + "private": true, + "type": "module" +} diff --git a/tests/integration/asset/source/rslib.config.ts b/tests/integration/asset/source/rslib.config.ts new file mode 100644 index 000000000..67338f56c --- /dev/null +++ b/tests/integration/asset/source/rslib.config.ts @@ -0,0 +1,46 @@ +import { defineConfig } from '@rslib/core'; +import { generateBundleEsmConfig } from 'test-helper'; + +const assetSourceRules = [ + { + test: /\.txt$/i, + type: 'asset/source', + }, +]; + +export default defineConfig({ + lib: [ + // 0. bundle + // esm + generateBundleEsmConfig({ + tools: { + rspack(_config, { addRules }) { + addRules(assetSourceRules); + }, + }, + output: { + distPath: { + root: './dist/esm/bundle', + }, + }, + }), + // 1. bundleless + // esm + generateBundleEsmConfig({ + bundle: false, + tools: { + rspack(_config, { addRules }) { + addRules(assetSourceRules); + }, + }, + output: { + distPath: { + root: './dist/esm/bundleless', + }, + }, + }), + ], + output: { + target: 'web', + }, +}); diff --git a/tests/integration/asset/source/src/assets/draft.txt b/tests/integration/asset/source/src/assets/draft.txt new file mode 100644 index 000000000..2b740b0ec --- /dev/null +++ b/tests/integration/asset/source/src/assets/draft.txt @@ -0,0 +1,2 @@ +this is a txt file +this is a txt file diff --git a/tests/integration/asset/source/src/index.js b/tests/integration/asset/source/src/index.js new file mode 100644 index 000000000..2c066948e --- /dev/null +++ b/tests/integration/asset/source/src/index.js @@ -0,0 +1,3 @@ +import draft from './assets/draft.txt'; + +console.log(draft); diff --git a/tests/integration/asset/svgr/rslib.config.ts b/tests/integration/asset/svgr/rslib.config.ts index 6318ab07a..987972fca 100644 --- a/tests/integration/asset/svgr/rslib.config.ts +++ b/tests/integration/asset/svgr/rslib.config.ts @@ -1,73 +1,63 @@ import { pluginReact } from '@rsbuild/plugin-react'; import { pluginSvgr } from '@rsbuild/plugin-svgr'; import { defineConfig } from '@rslib/core'; -import { generateBundleEsmConfig } from 'test-helper'; +import { generateBundleCjsConfig, generateBundleEsmConfig } from 'test-helper'; export default defineConfig({ lib: [ + // 0. bundle + // esm generateBundleEsmConfig({ - source: { - entry: { - index: './src/index.js', - }, - }, output: { distPath: { root: './dist/esm/bundle-default', }, }, - plugins: [pluginSvgr()], + plugins: [ + pluginSvgr({ + mixedImport: true, + }), + ], }), - generateBundleEsmConfig({ - source: { - entry: { - index: './src/index.js', - }, - }, - bundle: false, + // cjs + generateBundleCjsConfig({ output: { distPath: { - root: './dist/esm/bundleless-default', + root: './dist/cjs/bundle-default', }, }, - plugins: [pluginSvgr()], + plugins: [ + pluginSvgr({ + mixedImport: true, + }), + ], }), + // 1. bundleless + // esm generateBundleEsmConfig({ - source: { - entry: { - index: './src/namedExport.js', - }, - }, + bundle: false, output: { distPath: { - root: './dist/esm/bundle-named', + root: './dist/esm/bundleless-default', }, }, plugins: [ pluginSvgr({ - svgrOptions: { - exportType: 'named', - }, + mixedImport: true, }), ], }), - generateBundleEsmConfig({ - source: { - entry: { - index: './src/namedExport.js', - }, - }, + // cjs + generateBundleCjsConfig({ bundle: false, output: { distPath: { - root: './dist/esm/bundleless-named', + root: './dist/cjs/bundleless-default', }, }, plugins: [ pluginSvgr({ - svgrOptions: { - exportType: 'named', - }, + mixedImport: true, }), ], }), diff --git a/tests/integration/asset/svgr/assets/logo.svg b/tests/integration/asset/svgr/src/assets/logo.svg similarity index 100% rename from tests/integration/asset/svgr/assets/logo.svg rename to tests/integration/asset/svgr/src/assets/logo.svg diff --git a/tests/integration/asset/svgr/src/defaultImport.js b/tests/integration/asset/svgr/src/defaultImport.js new file mode 100644 index 000000000..57504f1b6 --- /dev/null +++ b/tests/integration/asset/svgr/src/defaultImport.js @@ -0,0 +1,3 @@ +import svgUrl from './assets/logo.svg'; + +console.log('default Import', 'reexport', svgUrl); diff --git a/tests/integration/asset/svgr/src/index.js b/tests/integration/asset/svgr/src/index.js index b6aaa208b..080d304bc 100644 --- a/tests/integration/asset/svgr/src/index.js +++ b/tests/integration/asset/svgr/src/index.js @@ -1,3 +1,3 @@ -import logo from '../assets/logo.svg?react'; - -console.log(logo); +import './queryImport'; +import './namedImport'; +import './defaultImport'; diff --git a/tests/integration/asset/svgr/src/namedExport.js b/tests/integration/asset/svgr/src/namedExport.js deleted file mode 100644 index 0241abbd6..000000000 --- a/tests/integration/asset/svgr/src/namedExport.js +++ /dev/null @@ -1,3 +0,0 @@ -import { ReactComponent } from '../assets/logo.svg'; - -console.log(ReactComponent); diff --git a/tests/integration/asset/svgr/src/namedImport.js b/tests/integration/asset/svgr/src/namedImport.js new file mode 100644 index 000000000..54540a206 --- /dev/null +++ b/tests/integration/asset/svgr/src/namedImport.js @@ -0,0 +1,3 @@ +import { ReactComponent } from './assets/logo.svg'; + +console.log('namedImport', 'ReactComponent', ReactComponent); diff --git a/tests/integration/asset/svgr/src/queryImport.js b/tests/integration/asset/svgr/src/queryImport.js new file mode 100644 index 000000000..3cdc85828 --- /dev/null +++ b/tests/integration/asset/svgr/src/queryImport.js @@ -0,0 +1,3 @@ +import ReactComponent from './assets/logo.svg?react'; + +console.log('queryImport', 'ReactComponent', ReactComponent); diff --git a/tests/integration/bundle-false/__snapshots__/index.test.ts.snap b/tests/integration/bundle-false/__snapshots__/index.test.ts.snap index b9b52178a..45b75db6e 100644 --- a/tests/integration/bundle-false/__snapshots__/index.test.ts.snap +++ b/tests/integration/bundle-false/__snapshots__/index.test.ts.snap @@ -1,7 +1,8 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`svgr in bundleless 1`] = ` -"import * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__ from "react/jsx-runtime"; +"import __rslib_svgr_url__0__ from "../static/svg/logo.svg"; +import * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__ from "react/jsx-runtime"; import "react"; const SvgLogo = (props)=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", @@ -24,9 +25,8 @@ const SvgLogo = (props)=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_r ] }) }); -const logoreact = SvgLogo; -const src_rslib_entry_ = logoreact; -export { src_rslib_entry_ as default }; +const logo_rslib_entry_ = __rslib_svgr_url__0__; +export { SvgLogo as ReactComponent, logo_rslib_entry_ as default }; " `; @@ -59,7 +59,8 @@ var __webpack_require__ = {}; var __webpack_exports__ = {}; __webpack_require__.r(__webpack_exports__); __webpack_require__.d(__webpack_exports__, { - default: ()=>src_rslib_entry_ + ReactComponent: ()=>SvgLogo, + default: ()=>logo_rslib_entry_ }); const jsx_runtime_namespaceObject = require("react/jsx-runtime"); require("react"); @@ -84,8 +85,7 @@ const SvgLogo = (props)=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("svg ] }) }); -const logoreact = SvgLogo; -const src_rslib_entry_ = logoreact; +const logo_rslib_entry_ = require("../static/svg/logo.svg"); var __webpack_export_target__ = exports; for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { diff --git a/tests/integration/bundle-false/asset/rslib.config.ts b/tests/integration/bundle-false/asset/rslib.config.ts index 68e3b9d61..e9a72ab2e 100644 --- a/tests/integration/bundle-false/asset/rslib.config.ts +++ b/tests/integration/bundle-false/asset/rslib.config.ts @@ -10,15 +10,4 @@ export default defineConfig({ bundle: false, }), ], - // do not inline svg - output: { - dataUriLimit: { - svg: 0, - }, - }, - source: { - entry: { - index: ['./src/**'], - }, - }, }); diff --git a/tests/integration/bundle-false/asset/src/assets/image.png b/tests/integration/bundle-false/asset/src/assets/image.png new file mode 100644 index 0000000000000000000000000000000000000000..a53ecc0929e27fe41cc34747a6ee1691b043b05a GIT binary patch literal 178620 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

w5@Mc11tHlUTe7{uOm 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 AzyJUM literal 0 HcmV?d00001 diff --git a/tests/integration/bundle-false/asset/assets/logo.svg b/tests/integration/bundle-false/asset/src/assets/logo.svg similarity index 100% rename from tests/integration/bundle-false/asset/assets/logo.svg rename to tests/integration/bundle-false/asset/src/assets/logo.svg diff --git a/tests/integration/bundle-false/asset/src/index.js b/tests/integration/bundle-false/asset/src/index.js index 2e3671336..fcd03c098 100644 --- a/tests/integration/bundle-false/asset/src/index.js +++ b/tests/integration/bundle-false/asset/src/index.js @@ -1,5 +1,5 @@ -import image from '../assets/image.png'; -import logoURL from '../assets/logo.svg'; +import image from './assets/image.png'; +import logoURL from './assets/logo.svg'; console.log(logoURL); console.log(image); diff --git a/tests/integration/bundle-false/index.test.ts b/tests/integration/bundle-false/index.test.ts index c46d47115..0408da2de 100644 --- a/tests/integration/bundle-false/index.test.ts +++ b/tests/integration/bundle-false/index.test.ts @@ -147,15 +147,66 @@ test('asset in bundleless', async () => { const fixturePath = join(__dirname, 'asset'); const { contents } = await buildAndGetResults({ fixturePath }); - const assets = [ - 'const image_namespaceObject = __webpack_require__.p + "static/image/image.png";', - 'const logo_namespaceObject = __webpack_require__.p + "static/svg/logo.svg";', - ]; - - for (const asset of assets) { - expect(Object.values(contents.esm)[0]).toContain(asset); - expect(Object.values(contents.cjs)[0]).toContain(asset); - } + expect(Object.values(contents.esm)[0]).toMatchInlineSnapshot(` + "import image_rslib_entry_namespaceObject from "../static/image/image.png"; + export { image_rslib_entry_namespaceObject as default }; + " + `); + expect(Object.values(contents.esm)[1]).toMatchInlineSnapshot(` + "import logo_rslib_entry_namespaceObject from "../static/svg/logo.svg"; + export { logo_rslib_entry_namespaceObject as default }; + " + `); + expect(Object.values(contents.cjs)[0]).toMatchInlineSnapshot(` + ""use strict"; + var __webpack_modules__ = { + "./src/assets/image.png?__rslib_entry__": function(module) { + module.exports = require("../static/image/image.png"); + } + }; + var __webpack_module_cache__ = {}; + function __webpack_require__(moduleId) { + var cachedModule = __webpack_module_cache__[moduleId]; + if (void 0 !== cachedModule) return cachedModule.exports; + var module = __webpack_module_cache__[moduleId] = { + exports: {} + }; + __webpack_modules__[moduleId](module, module.exports, __webpack_require__); + return module.exports; + } + var __webpack_exports__ = __webpack_require__("./src/assets/image.png?__rslib_entry__"); + var __webpack_export_target__ = exports; + for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; + if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { + value: true + }); + " + `); + expect(Object.values(contents.cjs)[1]).toMatchInlineSnapshot(` + ""use strict"; + var __webpack_modules__ = { + "./src/assets/logo.svg?__rslib_entry__": function(module) { + module.exports = require("../static/svg/logo.svg"); + } + }; + var __webpack_module_cache__ = {}; + function __webpack_require__(moduleId) { + var cachedModule = __webpack_module_cache__[moduleId]; + if (void 0 !== cachedModule) return cachedModule.exports; + var module = __webpack_module_cache__[moduleId] = { + exports: {} + }; + __webpack_modules__[moduleId](module, module.exports, __webpack_require__); + return module.exports; + } + var __webpack_exports__ = __webpack_require__("./src/assets/logo.svg?__rslib_entry__"); + var __webpack_export_target__ = exports; + for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; + if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { + value: true + }); + " + `); }); test('svgr in bundleless', async () => { diff --git a/tests/integration/bundle-false/svgr/rslib.config.ts b/tests/integration/bundle-false/svgr/rslib.config.ts index 17aa8a6e4..73f59c3f5 100644 --- a/tests/integration/bundle-false/svgr/rslib.config.ts +++ b/tests/integration/bundle-false/svgr/rslib.config.ts @@ -20,5 +20,5 @@ export default defineConfig({ output: { target: 'web', }, - plugins: [pluginReact(), pluginSvgr()], + plugins: [pluginReact(), pluginSvgr({ mixedImport: true })], }); diff --git a/tests/integration/bundle-false/svgr/assets/logo.svg b/tests/integration/bundle-false/svgr/src/assets/logo.svg similarity index 100% rename from tests/integration/bundle-false/svgr/assets/logo.svg rename to tests/integration/bundle-false/svgr/src/assets/logo.svg diff --git a/tests/integration/bundle-false/svgr/src/index.jsx b/tests/integration/bundle-false/svgr/src/index.jsx index bbb3d6502..6622ccb4f 100644 --- a/tests/integration/bundle-false/svgr/src/index.jsx +++ b/tests/integration/bundle-false/svgr/src/index.jsx @@ -1,3 +1,3 @@ -import Logo from '../assets/logo.svg?react'; +import Logo from './assets/logo.svg'; export default Logo; diff --git a/tests/integration/redirect/asset.test.ts b/tests/integration/redirect/asset.test.ts new file mode 100644 index 000000000..1a0974b54 --- /dev/null +++ b/tests/integration/redirect/asset.test.ts @@ -0,0 +1,32 @@ +import path from 'node:path'; +import { buildAndGetResults, queryContent } from 'test-helper'; +import { beforeAll, expect, test } from 'vitest'; + +let contents: Awaited>['contents']; + +beforeAll(async () => { + const fixturePath = path.resolve(__dirname, './asset'); + contents = (await buildAndGetResults({ fixturePath })).contents; +}); + +test('0. default', async () => { + const { content: indexJs } = queryContent(contents.esm0!, /index\.js/); + const { content: indexCjs } = queryContent(contents.cjs0!, /index\.cjs/); + expect(indexJs).toMatchInlineSnapshot(` + "import * as __WEBPACK_EXTERNAL_MODULE__assets_logo_js_450929b7__ from "./assets/logo.js"; + __WEBPACK_EXTERNAL_MODULE__assets_logo_js_450929b7__["default"]; + " + `); + expect(indexCjs).toContain('require("./assets/logo.cjs")'); +}); + +test('1. redirect.asset = false', async () => { + const { content: indexJs } = queryContent(contents.esm1!, /index\.js/); + const { content: indexCjs } = queryContent(contents.cjs1!, /index\.cjs/); + expect(indexJs).toMatchInlineSnapshot(` + "import * as __WEBPACK_EXTERNAL_MODULE__assets_logo_svg_cfb3a4d9__ from "./assets/logo.svg"; + __WEBPACK_EXTERNAL_MODULE__assets_logo_svg_cfb3a4d9__["default"]; + " + `); + expect(indexCjs).toContain('require("./assets/logo.svg")'); +}); diff --git a/tests/integration/redirect/asset/package.json b/tests/integration/redirect/asset/package.json new file mode 100644 index 000000000..7557e719c --- /dev/null +++ b/tests/integration/redirect/asset/package.json @@ -0,0 +1,6 @@ +{ + "name": "asset-redirect-test", + "version": "1.0.0", + "private": true, + "type": "module" +} diff --git a/tests/integration/redirect/asset/rslib.config.ts b/tests/integration/redirect/asset/rslib.config.ts new file mode 100644 index 000000000..697e61607 --- /dev/null +++ b/tests/integration/redirect/asset/rslib.config.ts @@ -0,0 +1,46 @@ +import { defineConfig } from '@rslib/core'; +import { generateBundleCjsConfig, generateBundleEsmConfig } from 'test-helper'; + +export default defineConfig({ + lib: [ + // 0. default + generateBundleEsmConfig({ + bundle: false, + output: { + distPath: { + root: 'dist/default/esm', + }, + }, + }), + generateBundleCjsConfig({ + bundle: false, + output: { + distPath: { + root: 'dist/default/cjs', + }, + }, + }), + // 1. redirect.asset: false + generateBundleEsmConfig({ + bundle: false, + redirect: { asset: false }, + output: { + distPath: { + root: 'dist/asset-false/esm', + }, + }, + }), + generateBundleCjsConfig({ + bundle: false, + redirect: { asset: false }, + output: { + distPath: { + root: 'dist/asset-false/cjs', + }, + }, + }), + ], + output: { + target: 'web', + }, +}); diff --git a/tests/integration/redirect/asset/src/assets/logo.svg b/tests/integration/redirect/asset/src/assets/logo.svg new file mode 100644 index 000000000..6b60c1042 --- /dev/null +++ b/tests/integration/redirect/asset/src/assets/logo.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/tests/integration/redirect/asset/src/index.js b/tests/integration/redirect/asset/src/index.js new file mode 100644 index 000000000..96bf07c52 --- /dev/null +++ b/tests/integration/redirect/asset/src/index.js @@ -0,0 +1,3 @@ +import svg from './assets/logo.svg'; + +svg; diff --git a/tests/integration/style/asset/index.test.ts b/tests/integration/style/asset/index.test.ts new file mode 100644 index 000000000..9772c164e --- /dev/null +++ b/tests/integration/style/asset/index.test.ts @@ -0,0 +1,31 @@ +import { buildAndGetResults } from 'test-helper'; +import { expectFileContainContent } from 'test-helper/vitest'; +import { expect, test } from 'vitest'; + +test('should output css asset', async () => { + const fixturePath = __dirname; + const { contents } = await buildAndGetResults({ fixturePath, type: 'css' }); + const esmFiles = Object.keys(contents.esm); + expect(esmFiles).toMatchInlineSnapshot(` + [ + "/tests/integration/style/asset/dist/esm/index.css", + ] + `); + expectFileContainContent( + contents.esm, + 'index.css', + 'background: url(./static/svg/logo.svg)', + ); + + const cjsFiles = Object.keys(contents.cjs); + expect(cjsFiles).toMatchInlineSnapshot(` + [ + "/tests/integration/style/asset/dist/cjs/index.css", + ] + `); + expectFileContainContent( + contents.cjs, + 'index.css', + 'background: url(./static/svg/logo.svg)', + ); +}); diff --git a/tests/integration/style/asset/package.json b/tests/integration/style/asset/package.json new file mode 100644 index 000000000..0d291b36a --- /dev/null +++ b/tests/integration/style/asset/package.json @@ -0,0 +1,6 @@ +{ + "name": "style-asset-bundle-false-test", + "version": "1.0.0", + "private": true, + "type": "module" +} diff --git a/tests/integration/style/asset/rslib.config.ts b/tests/integration/style/asset/rslib.config.ts new file mode 100644 index 000000000..5cc8fdf27 --- /dev/null +++ b/tests/integration/style/asset/rslib.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from '@rslib/core'; +import { generateBundleCjsConfig, generateBundleEsmConfig } from 'test-helper'; + +export default defineConfig({ + lib: [ + generateBundleEsmConfig({ bundle: false }), + generateBundleCjsConfig({ bundle: false }), + ], + output: { + target: 'web', + }, +}); diff --git a/tests/integration/style/asset/src/assets/logo.svg b/tests/integration/style/asset/src/assets/logo.svg new file mode 100644 index 000000000..6b60c1042 --- /dev/null +++ b/tests/integration/style/asset/src/assets/logo.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/tests/integration/style/asset/src/index.css b/tests/integration/style/asset/src/index.css new file mode 100644 index 000000000..12d47743d --- /dev/null +++ b/tests/integration/style/asset/src/index.css @@ -0,0 +1,3 @@ +.foo { + background: url('./assets/logo.svg'); +} diff --git a/website/docs/en/config/lib/redirect.mdx b/website/docs/en/config/lib/redirect.mdx index ba18898e0..9f33aee3f 100644 --- a/website/docs/en/config/lib/redirect.mdx +++ b/website/docs/en/config/lib/redirect.mdx @@ -28,6 +28,7 @@ type StyleRedirect = { type Redirect = { js?: JsRedirect; style?: StyleRedirect; + asset?: boolean; }; ``` @@ -144,9 +145,9 @@ Whether to automatically redirect the file extension to import paths based on th - **Type:** `boolean` - **Default:** `true` -When set to `true`, When importing a normal style file, the path will be rewritten to the `.css` file. When importing [CSS Modules](/config/rsbuild/output#outputcssmodules), the path will be rewritten to the corresponding JavaScript output file. +When set to `true`, the file extension of importing a normal style file will be rewritten to `.css`. When importing [CSS Modules](/config/rsbuild/output#outputcssmodules), the path will be rewritten to the corresponding JavaScript output file. -When set to `false`, The file extension will remain unchanged from the original import path. +When set to `false`, the file extension will remain unchanged from the original import path. - **Example:** @@ -159,3 +160,14 @@ import './index.css'; // expected output import styles from './index.module.less'; // source code ↓ import styles from './index.module.mjs'; // expected output ``` + +## redirect.asset + +When set to `true`, the paths of imported resource files will be rewritten to the corresponding JavaScript product file. + +When set to `false`, the file extension will remain unchanged from the original import path. + +```ts +import url from './assets/logo.svg'; // source code ↓ +import url from './assets/logo.mjs'; // expected output +``` diff --git a/website/docs/zh/config/lib/redirect.mdx b/website/docs/zh/config/lib/redirect.mdx index b75d6d0eb..3df8ae680 100644 --- a/website/docs/zh/config/lib/redirect.mdx +++ b/website/docs/zh/config/lib/redirect.mdx @@ -43,6 +43,7 @@ const defaultRedirect = { path: true, extension: true, }, + asset: true, }; ``` @@ -102,7 +103,7 @@ const defaultRedirect = { 当设置为 `true` 时,无论原始扩展名或导入路径中是否指定,文件扩展名都将自动添加到产物文件的重写导入路径中。 -当设置为 `false` 时,文件扩展名将保持原始导入路径中的不变(无论是否指定或指定为任意值)。 +当设置为 `false` 时,文件扩展名将保持原始导入路径(无论是否指定或指定为任意值)。 ## redirect.style @@ -144,9 +145,9 @@ import styles from '../foo.css'; // './dist/utils/index.js' 预期生成的代 - **类型:** `boolean` - **默认值:** `true` -当设置为 `true` 时,导入普通样式文件时,路径将被重写为 `.css` 文件,导入 [CSS Modules](/config/rsbuild/output#outputcssmodules) 时,路径将被重写为到对应的 JavaScript 产物文件。 +当设置为 `true` 时,导入普通样式文件的文件扩展名将被重写为 `.css`,导入 [CSS Modules](/config/rsbuild/output#outputcssmodules) 时,路径将被重写为到对应的 JavaScript 产物文件。 -当设置为 `false` 时,文件扩展名将保持原始导入路径中的不变。 +当设置为 `false` 时,文件扩展名将保持原始导入路径。 - **示例:** @@ -159,3 +160,14 @@ import './index.css'; // 预期生成的代码 import styles from './index.module.less'; // 源码 ↓ import styles from './index.module.mjs'; // 预期生成的代码 ``` + +## redirect.asset + +当设置为 `true` 时,导入资源文件的路径将被重写到对应的 JavaScript 产物文件。 + +当设置为 `false` 时,文件扩展名将保持原始导入路径。 + +```ts +import url from './assets/logo.svg'; // 源码 ↓ +import url from './assets/logo.mjs'; // 预期生成的代码 +```