Skip to content

Commit 9d28b10

Browse files
authored
fix: bypass addWatchFile to avoid messed up dependencies in vite (see #130) (#131)
1 parent eac93d1 commit 9d28b10

File tree

2 files changed

+25
-9
lines changed

2 files changed

+25
-9
lines changed

packages/vite-plugin-svelte/src/index.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
} from './utils/options';
1414
import { VitePluginSvelteCache } from './utils/vite-plugin-svelte-cache';
1515

16-
import { setupWatchers } from './utils/watch';
16+
import { ensureWatchedFile, setupWatchers } from './utils/watch';
1717
import { resolveViaPackageJsonSvelte } from './utils/resolve';
1818
import { addExtraPreprocessors } from './utils/preprocess';
1919
import { PartialResolvedId } from 'rollup';
@@ -164,7 +164,9 @@ export function svelte(inlineOptions?: Partial<Options>): Plugin {
164164
logCompilerWarnings(compileData.compiled.warnings, options);
165165
cache.update(compileData);
166166
if (compileData.dependencies?.length && options.server) {
167-
compileData.dependencies.forEach((d) => this.addWatchFile(d));
167+
compileData.dependencies.forEach((d) => {
168+
ensureWatchedFile(options.server!.watcher, d, options.root);
169+
});
168170
}
169171
log.debug(`transform returns compiled js for ${filename}`);
170172
return compileData.compiled.js;

packages/vite-plugin-svelte/src/utils/watch.ts

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { IdParser } from './id';
55
import { ResolvedOptions } from './options';
66
import { knownSvelteConfigNames } from './load-svelte-config';
77
import path from 'path';
8+
import { FSWatcher } from 'vite';
89

910
export function setupWatchers(
1011
options: ResolvedOptions,
@@ -71,22 +72,35 @@ export function setupWatchers(
7172
};
7273

7374
// collection of watcher listeners by event
74-
const listeners = {
75-
add: [],
75+
const listenerCollection = {
76+
add: [] as Array<Function>,
7677
change: [emitChangeEventOnDependants],
7778
unlink: [removeUnlinkedFromCache, emitChangeEventOnDependants]
7879
};
7980
if (svelteConfigFile) {
80-
listeners.change.push(restartOnConfigChange);
81-
listeners.unlink.push(restartOnConfigChange);
81+
listenerCollection.change.push(restartOnConfigChange);
82+
listenerCollection.unlink.push(restartOnConfigChange);
8283
} else {
83-
// @ts-ignore
84-
listeners.add.push(restartOnConfigAdd);
84+
listenerCollection.add.push(restartOnConfigAdd);
8585
}
8686

87-
Object.entries(listeners).forEach(([evt, listeners]) => {
87+
Object.entries(listenerCollection).forEach(([evt, listeners]) => {
8888
if (listeners.length > 0) {
8989
watcher.on(evt, (filename) => listeners.forEach((listener) => listener(filename)));
9090
}
9191
});
9292
}
93+
// taken from vite utils
94+
export function ensureWatchedFile(watcher: FSWatcher, file: string | null, root: string): void {
95+
if (
96+
file &&
97+
// only need to watch if out of root
98+
!file.startsWith(root + '/') &&
99+
// some rollup plugins use null bytes for private resolved Ids
100+
!file.includes('\0') &&
101+
fs.existsSync(file)
102+
) {
103+
// resolve file to normalized system path
104+
watcher.add(path.resolve(file));
105+
}
106+
}

0 commit comments

Comments
 (0)