Skip to content

Commit

Permalink
fix #6420 (#6544)
Browse files Browse the repository at this point in the history
* fix #6420

* add test

* add test

* fix an error that parsed path

* fix path error when in Windows environment

* fix a path error

* update comment

---------

Co-authored-by: wuls <linsheng.wu@beantechs.com>
  • Loading branch information
JerryWu1234 and wuls authored Apr 12, 2023
1 parent c1e8f42 commit a9c2299
Show file tree
Hide file tree
Showing 7 changed files with 101 additions and 2 deletions.
5 changes: 5 additions & 0 deletions .changeset/moody-points-reflect.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'astro': patch
---

Correctly generate directories for assets when users customise the output via rollup options.
8 changes: 6 additions & 2 deletions packages/astro/src/core/build/static-build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import * as eslexer from 'es-module-lexer';
import glob from 'fast-glob';
import fs from 'fs';
import { bgGreen, bgMagenta, black, dim } from 'kleur/colors';
import path from 'path';
import { fileURLToPath } from 'url';
import * as vite from 'vite';
import {
Expand Down Expand Up @@ -384,12 +385,15 @@ async function ssrMoveAssets(opts: StaticBuildOptions) {
});

if (files.length > 0) {
// Make the directory
await fs.promises.mkdir(clientAssets, { recursive: true });

await Promise.all(
files.map(async (filename) => {
const currentUrl = new URL(filename, appendForwardSlash(serverAssets.toString()));
const clientUrl = new URL(filename, appendForwardSlash(clientAssets.toString()));
const dir = new URL(path.parse(clientUrl.href).dir)
// It can't find this file because the user defines a custom path
// that includes the folder paths in `assetFileNames
if(!fs.existsSync(dir)) await fs.promises.mkdir(dir, { recursive: true });
return fs.promises.rename(currentUrl, clientUrl);
})
);
Expand Down
21 changes: 21 additions & 0 deletions packages/astro/test/custom-assets-name.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { expect } from 'chai';
import { loadFixture } from './test-utils.js';

describe('custom the assets name function', () => {
/** @type {import('./test-utils').Fixture} */
let fixture;

before(async () => {
fixture = await loadFixture({
root: './fixtures/custom-assets-name/',
output: 'server',
});
await fixture.build();
});

it('It cant find this file cause the node throws an error if the users custom a path that includes the folder path', async () => {
const csslength = await fixture.readFile('client/assets/css/a.css')
/** @type {Set<string>} */
expect(!!csslength).to.equal(true);
});
});
34 changes: 34 additions & 0 deletions packages/astro/test/fixtures/custom-assets-name/astro.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { defineConfig } from 'astro/config';
import path from "path";

// https://astro.build/config
import node from "@astrojs/node";

// https://astro.build/config
export default defineConfig({
vite: {
build: {
cssCodeSplit: false,
assetsInlineLimit: 0,
rollupOptions: {
output: {

entryFileNames: 'assets/script/a.[hash].js',
assetFileNames: (option) => {
const { ext, dir, base } = path.parse(option.name);

if (ext == ".css") return path.join(dir, "assets/css", 'a.css');
return "assets/img/[name].[ext]";
}
}
}
}
},
build: {
assets: 'assets'
},
output: "server",
adapter: node({
mode: "standalone"
})
});
9 changes: 9 additions & 0 deletions packages/astro/test/fixtures/custom-assets-name/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"name": "@test/custom-assets-name",
"version": "0.0.0",
"private": true,
"dependencies": {
"astro": "workspace:*",
"@astrojs/node": "workspace:*"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
const title = 'My App';
---

<html>
<head>
<title>{title}</title>
</head>
<body>
<h1>{title}</h1>
</body>
</html>

<style>
h1 {
color: red;
}
</style>
8 changes: 8 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit a9c2299

Please sign in to comment.