* 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>
This commit is contained in:
parent
c1e8f42a20
commit
a9c22994e4
7 changed files with 101 additions and 2 deletions
5
.changeset/moody-points-reflect.md
Normal file
5
.changeset/moody-points-reflect.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
'astro': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Correctly generate directories for assets when users customise the output via rollup options.
|
|
@ -3,6 +3,7 @@ import * as eslexer from 'es-module-lexer';
|
||||||
import glob from 'fast-glob';
|
import glob from 'fast-glob';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import { bgGreen, bgMagenta, black, dim } from 'kleur/colors';
|
import { bgGreen, bgMagenta, black, dim } from 'kleur/colors';
|
||||||
|
import path from 'path';
|
||||||
import { fileURLToPath } from 'url';
|
import { fileURLToPath } from 'url';
|
||||||
import * as vite from 'vite';
|
import * as vite from 'vite';
|
||||||
import {
|
import {
|
||||||
|
@ -384,12 +385,15 @@ async function ssrMoveAssets(opts: StaticBuildOptions) {
|
||||||
});
|
});
|
||||||
|
|
||||||
if (files.length > 0) {
|
if (files.length > 0) {
|
||||||
// Make the directory
|
|
||||||
await fs.promises.mkdir(clientAssets, { recursive: true });
|
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
files.map(async (filename) => {
|
files.map(async (filename) => {
|
||||||
const currentUrl = new URL(filename, appendForwardSlash(serverAssets.toString()));
|
const currentUrl = new URL(filename, appendForwardSlash(serverAssets.toString()));
|
||||||
const clientUrl = new URL(filename, appendForwardSlash(clientAssets.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);
|
return fs.promises.rename(currentUrl, clientUrl);
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
21
packages/astro/test/custom-assets-name.test.js
Normal file
21
packages/astro/test/custom-assets-name.test.js
Normal file
|
@ -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
packages/astro/test/fixtures/custom-assets-name/astro.config.mjs
vendored
Normal file
34
packages/astro/test/fixtures/custom-assets-name/astro.config.mjs
vendored
Normal file
|
@ -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
packages/astro/test/fixtures/custom-assets-name/package.json
vendored
Normal file
9
packages/astro/test/fixtures/custom-assets-name/package.json
vendored
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"name": "@test/custom-assets-name",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"private": true,
|
||||||
|
"dependencies": {
|
||||||
|
"astro": "workspace:*",
|
||||||
|
"@astrojs/node": "workspace:*"
|
||||||
|
}
|
||||||
|
}
|
18
packages/astro/test/fixtures/custom-assets-name/src/pages/index.astro
vendored
Normal file
18
packages/astro/test/fixtures/custom-assets-name/src/pages/index.astro
vendored
Normal file
|
@ -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>
|
|
@ -2450,6 +2450,14 @@ importers:
|
||||||
specifier: workspace:*
|
specifier: workspace:*
|
||||||
version: link:../../..
|
version: link:../../..
|
||||||
|
|
||||||
|
packages/astro/test/fixtures/custom-assets-name:
|
||||||
|
specifiers:
|
||||||
|
'@astrojs/node': workspace:*
|
||||||
|
astro: workspace:*
|
||||||
|
dependencies:
|
||||||
|
'@astrojs/node': link:../../../../integrations/node
|
||||||
|
astro: link:../../..
|
||||||
|
|
||||||
packages/astro/test/fixtures/custom-elements:
|
packages/astro/test/fixtures/custom-elements:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@test/custom-element-renderer':
|
'@test/custom-element-renderer':
|
||||||
|
|
Loading…
Reference in a new issue