Skip to content

Commit 26bbea1

Browse files
committed
fix(@angular/build): serve extensionless assets without transformation
Extensionless files are now served directly without being processed by the underlying transformation pipeline. This ensures that such assets are delivered unmodified and prevents potential serving errors. (cherry picked from commit e2ee6b3)
1 parent 25b8a15 commit 26bbea1

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

packages/angular/build/src/builders/dev-server/tests/behavior/build-assets_spec.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,26 @@ describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupT
2121
"import {foo} from 'unresolved'; /* a comment */const foo = `bar`;\n\n\n";
2222

2323
describe('Behavior: "browser builder assets"', () => {
24+
it('serves a project extensionless asset unmodified', async () => {
25+
await harness.writeFile('src/extensionless', javascriptFileContent);
26+
27+
setupTarget(harness, {
28+
assets: ['src/extensionless'],
29+
optimization: {
30+
scripts: true,
31+
},
32+
});
33+
34+
harness.useTarget('serve', {
35+
...BASE_OPTIONS,
36+
});
37+
38+
const { result, response } = await executeOnceAndFetch(harness, 'extensionless');
39+
40+
expect(result?.success).toBeTrue();
41+
expect(await response?.text()).toContain(javascriptFileContent);
42+
});
43+
2444
it('serves a project JavaScript asset unmodified', async () => {
2545
await harness.writeFile('src/extra.js', javascriptFileContent);
2646

packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ export function createAngularAssetsMiddleware(
4545
// Rewrite all build assets to a vite raw fs URL
4646
const asset = assets.get(pathname);
4747
if (asset) {
48-
// This is a workaround to serve CSS, JS and TS files without Vite transformations.
49-
if (JS_TS_REGEXP.test(extension) || CSS_PREPROCESSOR_REGEXP.test(extension)) {
48+
// This is a workaround to serve extensionless, CSS, JS and TS files without Vite transformations.
49+
if (!extension || JS_TS_REGEXP.test(extension) || CSS_PREPROCESSOR_REGEXP.test(extension)) {
5050
const contents = readFileSync(asset.source);
5151
const etag = `W/${createHash('sha256').update(contents).digest('hex')}`;
5252
if (checkAndHandleEtag(req, res, etag)) {

0 commit comments

Comments
 (0)