Skip to content

Commit

Permalink
Fix: Relative imports inside of hosited script on windows (#3423)
Browse files Browse the repository at this point in the history
* Failing test

* Add some debugging

* Normalize filename to remove @fs prefix

* Adds a changeset

* Break it again

* Fix it

* Update assertion
  • Loading branch information
matthewp authored May 24, 2022
1 parent af179c0 commit 463a1c2
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 4 deletions.
5 changes: 5 additions & 0 deletions .changeset/friendly-ways-collect.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'astro': patch
---

Fix relative inline scripts on Windows
5 changes: 3 additions & 2 deletions packages/astro/src/vite-plugin-astro/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,9 @@ export default function astro({ config, logging }: AstroPluginOptions): vite.Plu
// If resolving from an astro subresource such as a hoisted script,
// we need to resolve relative paths ourselves.
if (from) {
const { query: fromQuery, filename } = parseAstroRequest(from);
if (fromQuery.astro && isRelativePath(id) && fromQuery.type === 'script') {
const parsedFrom = parseAstroRequest(from);
if (parsedFrom.query.astro && isRelativePath(id) && parsedFrom.query.type === 'script') {
const filename = normalizeFilename(parsedFrom.filename);
const resolvedURL = new URL(id, `file://${filename}`);
const resolved = resolvedURL.pathname;
if (isBrowserPath(resolved)) {
Expand Down
4 changes: 3 additions & 1 deletion packages/astro/test/astro-scripts.test.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { expect } from 'chai';
import * as cheerio from 'cheerio';
import path from 'path';
import { loadFixture } from './test-utils.js';

describe('Scripts (hoisted and not)', () => {
Expand Down Expand Up @@ -50,6 +49,9 @@ describe('Scripts (hoisted and not)', () => {

// test 3: the JS exists
expect(inlineEntryJS).to.be.ok;

// test 4: Inline imported JS is included
expect(inlineEntryJS).to.contain("I AM IMPORTED INLINE", "The inline imported JS is included in the bundle");
});

it('External page builds the hoisted scripts to a single bundle', async () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,9 @@ import Inline from '../components/Inline.astro';
<Inline />
<Inline />
<Inline />
<script>
// This must be relative for the test
import '../scripts/hoist_external_imported_inline.js';
</script>
</body>
</html>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
console.log("I AM IMPORTED INLINE");

0 comments on commit 463a1c2

Please sign in to comment.