Skip to content

Commit 57ee22f

Browse files
authored
Fixes dynamic import regression (#3684)
* Fixes dynamic import regression * Adds a changeset
1 parent 96315b0 commit 57ee22f

File tree

3 files changed

+29
-15
lines changed

3 files changed

+29
-15
lines changed

.changeset/itchy-coins-sort.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'snowpack': patch
3+
---
4+
5+
Fix for dynamic import scanning

snowpack/src/sources/local.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -648,18 +648,20 @@ export class PackageSourceLocal implements PackageSource {
648648
continue;
649649
}
650650

651-
const scannedImport = code.substring(imp.s, imp.e).replace(/(\/|\\)+$/, ''); // remove trailing slash from end of specifier (easier for Node to resolve)
652-
if (isRemoteUrl(scannedImport)) {
651+
// remove trailing slash from end of specifier (easier for Node to resolve)
652+
spec = spec.replace(/(\/|\\)+$/, '');
653+
654+
if (isRemoteUrl(spec)) {
653655
continue; // ignore remote files
654656
}
655-
if (isPathImport(scannedImport)) {
657+
if (isPathImport(spec)) {
656658
continue;
657659
}
658-
const [scannedPackageName] = parsePackageImportSpecifier(scannedImport);
660+
const [scannedPackageName] = parsePackageImportSpecifier(spec);
659661
if (scannedPackageName && memoizedImportMap[scannedPackageName]) {
660662
continue; // if we’ve already installed this, then don’t reinstall
661663
}
662-
newPackageImports.add(scannedImport);
664+
newPackageImports.add(spec);
663665
}
664666

665667
for (const packageImport of newPackageImports) {

test/snowpack/runtime/runtime.test.js

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -241,31 +241,39 @@ describe('runtime', () => {
241241

242242
it('Installs dynamic imports', async () => {
243243
const fixture = await testRuntimeFixture({
244-
'packages/@owner/dyn/package.json': dedent`
244+
'packages/@owner/dyn2/package.json': dedent`
245245
{
246246
"version": "1.0.0",
247-
"name": "@owner/dyn",
247+
"name": "@owner/dyn2",
248248
"module": "main.js"
249249
}
250250
`,
251-
'packages/@owner/dyn/sub/path.js': dedent`
252-
export default 2;
251+
'packages/@owner/dyn2/sub/sibling.js': dedent`
252+
export default 3;
253+
`,
254+
'packages/@owner/dyn2/sub/path.js': dedent`
255+
const promise = import('./sibling.js');
256+
257+
export default async function() {
258+
let mod = await promise;
259+
return mod.default;
260+
}
253261
`,
254262
'package.json': dedent`
255263
{
256264
"version": "1.0.1",
257265
"name": "@snowpack/test-runtime-import-dynamic-pkg",
258266
"dependencies": {
259-
"@owner/dyn": "file:./packages/@owner/dyn"
267+
"@owner/dyn2": "file:./packages/@owner/dyn2"
260268
}
261269
}
262270
`,
263271
'main.js': dedent`
264-
const promise = import('@owner/dyn/sub/path.js');
272+
import fn from '@owner/dyn2/sub/path.js';
265273
266274
export default async function() {
267-
let mod = await promise;
268-
return mod.default;
275+
let value = await fn();
276+
return value;
269277
}
270278
`,
271279
});
@@ -274,8 +282,7 @@ describe('runtime', () => {
274282
let mod = await fixture.runtime.importModule('/main.js');
275283
let promise = mod.exports.default();
276284
let value = await promise;
277-
console.log(value);
278-
expect(value).toEqual(2);
285+
expect(value).toEqual(3);
279286
} finally {
280287
await fixture.cleanup();
281288
}

0 commit comments

Comments
 (0)