32 lines
824 B
JavaScript
32 lines
824 B
JavaScript
|
const hotReloadAPIPath = JSON.stringify(require.resolve('vue-hot-reload-api'))
|
||
|
|
||
|
const genTemplateHotReloadCode = (id, request) => {
|
||
|
return `
|
||
|
module.hot.accept(${request}, function () {
|
||
|
api.rerender('${id}', {
|
||
|
render: render,
|
||
|
staticRenderFns: staticRenderFns
|
||
|
})
|
||
|
})
|
||
|
`.trim()
|
||
|
}
|
||
|
|
||
|
exports.genHotReloadCode = (id, functional, templateRequest) => {
|
||
|
return `
|
||
|
/* hot reload */
|
||
|
if (module.hot) {
|
||
|
var api = require(${hotReloadAPIPath})
|
||
|
api.install(require('vue'))
|
||
|
if (api.compatible) {
|
||
|
module.hot.accept()
|
||
|
if (!api.isRecorded('${id}')) {
|
||
|
api.createRecord('${id}', component.options)
|
||
|
} else {
|
||
|
api.${functional ? 'rerender' : 'reload'}('${id}', component.options)
|
||
|
}
|
||
|
${templateRequest ? genTemplateHotReloadCode(id, templateRequest) : ''}
|
||
|
}
|
||
|
}
|
||
|
`.trim()
|
||
|
}
|