Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vue-loader
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
pi-plusplus
fork-from-github
vue-loader
Commits
4ccd96fe
Commit
4ccd96fe
authored
May 10, 2018
by
Evan You
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: improve HMR reliability
parent
67a07822
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
18 additions
and
30 deletions
+18
-30
hotReload.js
lib/codegen/hotReload.js
+13
-18
index.js
lib/index.js
+3
-2
templateLoader.js
lib/loaders/templateLoader.js
+2
-10
No files found.
lib/codegen/hotReload.js
View file @
4ccd96fe
const
hotReloadAPIPath
=
JSON
.
stringify
(
require
.
resolve
(
'vue-hot-reload-api'
))
const
hotReloadAPIPath
=
JSON
.
stringify
(
require
.
resolve
(
'vue-hot-reload-api'
))
exports
.
genHotReloadCode
=
(
id
,
functional
)
=>
{
const
genTemplateHotReloadCode
=
(
id
,
request
)
=>
{
return
wrap
(
`
return
`
if (!module.hot.data) {
module.hot.accept(
${
request
}
, function () {
api.createRecord('
${
id
}
', component.options)
api.rerender('
${
id
}
', {
} else {
api.
${
functional
?
`rerender`
:
`reload`
}
('
${
id
}
', component.options)
}
`
)
}
exports
.
genTemplateHotReloadCode
=
id
=>
{
return
wrap
(
`
if (module.hot.data) {
require(
${
hotReloadAPIPath
}
).rerender('
${
id
}
', {
render: render,
render: render,
staticRenderFns: staticRenderFns
staticRenderFns: staticRenderFns
})
})
}
}
)
`
)
`
.
trim
(
)
}
}
function
wrap
(
inner
)
{
exports
.
genHotReloadCode
=
(
id
,
functional
,
templateRequest
)
=>
{
return
`
return
`
/* hot reload */
/* hot reload */
if (module.hot) {
if (module.hot) {
...
@@ -29,7 +19,12 @@ if (module.hot) {
...
@@ -29,7 +19,12 @@ if (module.hot) {
api.install(require('vue'))
api.install(require('vue'))
if (api.compatible) {
if (api.compatible) {
module.hot.accept()
module.hot.accept()
${
inner
.
trim
()}
if (!module.hot.data) {
api.createRecord('
${
id
}
', component.options)
} else {
api.
${
functional
?
`rerender`
:
`reload`
}
('
${
id
}
', component.options)
}
${
templateRequest
?
genTemplateHotReloadCode
(
id
,
templateRequest
)
:
``
}
}
}
}
}
`
.
trim
()
`
.
trim
()
...
...
lib/index.js
View file @
4ccd96fe
...
@@ -80,13 +80,14 @@ module.exports = function (source) {
...
@@ -80,13 +80,14 @@ module.exports = function (source) {
// template
// template
let
templateImport
=
`var render, staticRenderFns`
let
templateImport
=
`var render, staticRenderFns`
let
templateRequest
if
(
descriptor
.
template
)
{
if
(
descriptor
.
template
)
{
const
src
=
descriptor
.
template
.
src
||
resourcePath
const
src
=
descriptor
.
template
.
src
||
resourcePath
const
idQuery
=
`&id=
${
id
}
`
const
idQuery
=
`&id=
${
id
}
`
const
scopedQuery
=
hasScoped
?
`&scoped=true`
:
``
const
scopedQuery
=
hasScoped
?
`&scoped=true`
:
``
const
attrsQuery
=
attrsToQuery
(
descriptor
.
template
.
attrs
)
const
attrsQuery
=
attrsToQuery
(
descriptor
.
template
.
attrs
)
const
query
=
`?vue&type=template
${
idQuery
}${
scopedQuery
}${
attrsQuery
}
`
const
query
=
`?vue&type=template
${
idQuery
}${
scopedQuery
}${
attrsQuery
}
`
const
request
=
stringifyRequest
(
src
+
query
)
const
request
=
templateRequest
=
stringifyRequest
(
src
+
query
)
templateImport
=
`import { render, staticRenderFns } from
${
request
}
`
templateImport
=
`import { render, staticRenderFns } from
${
request
}
`
}
}
...
@@ -145,7 +146,7 @@ var component = normalizer(
...
@@ -145,7 +146,7 @@ var component = normalizer(
}
}
if
(
needsHotReload
)
{
if
(
needsHotReload
)
{
code
+=
`\n`
+
genHotReloadCode
(
id
,
hasFunctional
)
code
+=
`\n`
+
genHotReloadCode
(
id
,
hasFunctional
,
templateRequest
)
}
}
// Expose filename. This is used by the devtools and vue runtime warnings.
// Expose filename. This is used by the devtools and vue runtime warnings.
...
...
lib/loaders/templateLoader.js
View file @
4ccd96fe
const
qs
=
require
(
'querystring'
)
const
qs
=
require
(
'querystring'
)
const
loaderUtils
=
require
(
'loader-utils'
)
const
loaderUtils
=
require
(
'loader-utils'
)
const
{
compileTemplate
}
=
require
(
'@vue/component-compiler-utils'
)
const
{
compileTemplate
}
=
require
(
'@vue/component-compiler-utils'
)
const
{
genTemplateHotReloadCode
}
=
require
(
'../codegen/hotReload'
)
// Loader that compiles raw template into JavaScript functions.
// Loader that compiles raw template into JavaScript functions.
// This is injected by the global pitcher (../pitch) for template
// This is injected by the global pitcher (../pitch) for template
...
@@ -18,7 +17,6 @@ module.exports = function (source) {
...
@@ -18,7 +17,6 @@ module.exports = function (source) {
const
isServer
=
loaderContext
.
target
===
'node'
const
isServer
=
loaderContext
.
target
===
'node'
const
isProduction
=
loaderContext
.
minimize
||
process
.
env
.
NODE_ENV
===
'production'
const
isProduction
=
loaderContext
.
minimize
||
process
.
env
.
NODE_ENV
===
'production'
const
isFunctional
=
query
.
functional
const
isFunctional
=
query
.
functional
const
needsHotReload
=
!
isServer
&&
!
isProduction
&&
options
.
hotReload
!==
false
// allow using custom compiler via options
// allow using custom compiler via options
const
compiler
=
options
.
compiler
||
require
(
'vue-template-compiler'
)
const
compiler
=
options
.
compiler
||
require
(
'vue-template-compiler'
)
...
@@ -59,16 +57,10 @@ module.exports = function (source) {
...
@@ -59,16 +57,10 @@ module.exports = function (source) {
)
)
}
}
let
{
code
}
=
compiled
const
{
code
}
=
compiled
// hot-reload
if
(
needsHotReload
)
{
code
+=
genTemplateHotReloadCode
(
id
)
}
// finish with ESM exports
// finish with ESM exports
code
+=
`export { render, staticRenderFns }`
return
code
+
`\nexport { render, staticRenderFns }`
return
code
}
}
function
pad
(
source
)
{
function
pad
(
source
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment