Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 0 additions & 12 deletions hmr.d.ts

This file was deleted.

13 changes: 6 additions & 7 deletions playground/testHmrManual.js
Original file line number Diff line number Diff line change
@@ -1,26 +1,25 @@
import { hot } from 'vite/hmr'
import './testHmrManualDep'

export const foo = 1

if (__DEV__) {
hot.accept(({ foo }) => {
if (import.meta.hot) {
import.meta.hot.accept(({ foo }) => {
console.log('(self-accepting)1.foo is now:', foo)
})

hot.accept(({ foo }) => {
import.meta.hot.accept(({ foo }) => {
console.log('(self-accepting)2.foo is now:', foo)
})

hot.dispose(() => {
import.meta.hot.dispose(() => {
console.log(`foo was: ${foo}`)
})

hot.accept('./testHmrManualDep.js', ({ foo }) => {
import.meta.hot.accept('./testHmrManualDep.js', ({ foo }) => {
console.log('(single dep) foo is now:', foo)
})

hot.accept(['./testHmrManualDep.js'], (modules) => {
import.meta.hot.accept(['./testHmrManualDep.js'], (modules) => {
console.log('(multiple deps) foo is now:', modules[0].foo)
})
}
6 changes: 2 additions & 4 deletions playground/testHmrManualDep.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
import { hot } from 'vite/hmr'

export const foo = 1

if (__DEV__) {
hot.dispose(() => {
if (import.meta.hot) {
import.meta.hot.dispose(() => {
console.log(`(dep) foo was: ${foo}`)
})
}
63 changes: 43 additions & 20 deletions src/client/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -225,28 +225,51 @@ const jsHotModuleMap = new Map<string, HotModule>()
const jsDisposeMap = new Map<string, () => void | Promise<void>>()
const customUpdateMap = new Map<string, ((customData: any) => void)[]>()

export const hot = {
accept(
id: string,
deps: HotCallback['deps'],
callback: HotCallback['fn'] = () => {}
) {
const mod: HotModule = jsHotModuleMap.get(id) || {
id,
callbacks: []
}
mod.callbacks.push({ deps, fn: callback })
jsHotModuleMap.set(id, mod)
},
export const createHotContext = (id: string) => {
return {
accept(
deps?: HotCallback['deps'] | HotCallback['fn'],
callback: HotCallback['fn'] = () => {}
) {
// accept()
if (!deps && !callback) {
deps = id
}

dispose(id: string, cb: () => void) {
jsDisposeMap.set(id, cb)
},
// accept(() => {})
if (typeof deps === 'function') {
callback = deps
deps = id
}

const mod: HotModule = jsHotModuleMap.get(id) || {
id,
callbacks: []
}
mod.callbacks.push({
deps: deps as HotCallback['deps'],
fn: callback
})
jsHotModuleMap.set(id, mod)
},

on(event: string, cb: () => void) {
const existing = customUpdateMap.get(event) || []
existing.push(cb)
customUpdateMap.set(event, existing)
dispose(cb: () => void) {
jsDisposeMap.set(id, cb)
},

// noop, used for static analysis only
decline() {},

invalidate() {
location.reload()
},

// custom events
on(event: string, cb: () => void) {
const existing = customUpdateMap.get(event) || []
existing.push(cb)
customUpdateMap.set(event, existing)
}
}
}

Expand Down
9 changes: 0 additions & 9 deletions src/node/build/buildPluginResolve.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { Plugin } from 'rollup'
import fs from 'fs-extra'
import { hmrClientId } from '../server/serverPluginHmr'
import { resolveVue } from '../utils/resolveVue'
import { InternalResolver } from '../resolver'

Expand All @@ -15,9 +14,6 @@ export const createBuildResolvePlugin = (
async resolveId(id, importer) {
const original = id
id = resolver.alias(id) || id
if (id === hmrClientId) {
return hmrClientId
}
if (id === 'vue' || id.startsWith('@vue/')) {
const vuePaths = resolveVue(root)
if (id in vuePaths) {
Expand All @@ -36,11 +32,6 @@ export const createBuildResolvePlugin = (
const resolved = this.resolve(id, importer, { skipSelf: true })
return resolved || { id }
}
},
load(id: string) {
if (id === hmrClientId) {
return `export const hot = {accept(){},dispose(){},on(){}}`
}
}
}
}
3 changes: 2 additions & 1 deletion src/node/build/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,8 @@ export async function build(options: BuildConfig): Promise<BuildResult> {
(id) => /\.(j|t)sx?$/.test(id),
{
...envReplacements,
'process.env.': `({}).`
'process.env.': `({}).`,
'import.meta.hot': `false`
},
sourcemap
),
Expand Down
Loading