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
0f0b09ba
Commit
0f0b09ba
authored
Jun 04, 2018
by
Hiroki Osame
Committed by
Evan You
Jun 04, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: inherit root request query in custom block loaders (#1330)
parent
1bfc08a8
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
55 additions
and
7 deletions
+55
-7
customBlocks.js
lib/codegen/customBlocks.js
+3
-1
styleInjection.js
lib/codegen/styleInjection.js
+2
-1
index.js
lib/index.js
+9
-4
advanced.spec.js
test/advanced.spec.js
+18
-0
query.js
test/mock-loaders/query.js
+22
-0
utils.js
test/utils.js
+1
-1
No files found.
lib/codegen/customBlocks.js
View file @
0f0b09ba
...
...
@@ -4,13 +4,15 @@ const { attrsToQuery } = require('./utils')
module
.
exports
=
function
genCustomBlocksCode
(
blocks
,
resourcePath
,
resourceQuery
,
stringifyRequest
)
{
return
`\n/* custom blocks */\n`
+
blocks
.
map
((
block
,
i
)
=>
{
const
src
=
block
.
attrs
.
src
||
resourcePath
const
attrsQuery
=
attrsToQuery
(
block
.
attrs
)
const
issuerQuery
=
block
.
attrs
.
src
?
`&issuerPath=
${
qs
.
escape
(
resourcePath
)}
`
:
''
const
query
=
`?vue&type=custom&index=
${
i
}
&blockType=
${
qs
.
escape
(
block
.
type
)}${
issuerQuery
}${
attrsQuery
}
`
const
inheritQuery
=
resourceQuery
?
`&
${
resourceQuery
.
slice
(
1
)}
`
:
''
const
query
=
`?vue&type=custom&index=
${
i
}
&blockType=
${
qs
.
escape
(
block
.
type
)}${
issuerQuery
}${
attrsQuery
}${
inheritQuery
}
`
return
(
`import block
${
i
}
from
${
stringifyRequest
(
src
+
query
)}
\n`
+
`if (typeof block
${
i
}
=== 'function') block
${
i
}
(component)`
...
...
lib/codegen/styleInjection.js
View file @
0f0b09ba
...
...
@@ -20,10 +20,11 @@ module.exports = function genStyleInjectionCode (
function
genStyleRequest
(
style
,
i
)
{
const
src
=
style
.
src
||
resourcePath
const
attrsQuery
=
attrsToQuery
(
style
.
attrs
,
'css'
)
const
inheritQuery
=
`&
${
loaderContext
.
resourceQuery
.
slice
(
1
)}
`
// make sure to only pass id when necessary so that we don't inject
// duplicate tags when multiple components import the same css file
const
idQuery
=
style
.
scoped
?
`&id=
${
id
}
`
:
``
const
query
=
`?vue&type=style&index=
${
i
}${
idQuery
}${
attrsQuery
}
`
const
query
=
`?vue&type=style&index=
${
i
}${
idQuery
}${
attrsQuery
}
${
inheritQuery
}
`
return
stringifyRequest
(
src
+
query
)
}
...
...
lib/index.js
View file @
0f0b09ba
...
...
@@ -37,7 +37,9 @@ module.exports = function (source) {
resourceQuery
}
=
loaderContext
const
incomingQuery
=
qs
.
parse
(
resourceQuery
.
slice
(
1
))
const
rawQuery
=
resourceQuery
.
slice
(
1
)
const
inheritQuery
=
`&
${
rawQuery
}
`
const
incomingQuery
=
qs
.
parse
(
rawQuery
)
const
options
=
loaderUtils
.
getOptions
(
loaderContext
)
||
{}
const
isServer
=
target
===
'node'
...
...
@@ -65,7 +67,9 @@ module.exports = function (source) {
// module id for scoped CSS & hot-reload
const
shortFilePath
=
path
.
relative
(
context
,
resourcePath
)
.
replace
(
/^
(\.\.[\\\/])
+/
,
''
)
.
replace
(
/^
(\.\.[\\\/])
+/
,
''
)
+
resourceQuery
const
id
=
hash
(
isProduction
?
(
shortFilePath
+
'
\
n'
+
source
)
...
...
@@ -90,7 +94,7 @@ module.exports = function (source) {
const
idQuery
=
`&id=
${
id
}
`
const
scopedQuery
=
hasScoped
?
`&scoped=true`
:
``
const
attrsQuery
=
attrsToQuery
(
descriptor
.
template
.
attrs
)
const
query
=
`?vue&type=template
${
idQuery
}${
scopedQuery
}${
attrsQuery
}
`
const
query
=
`?vue&type=template
${
idQuery
}${
scopedQuery
}${
attrsQuery
}
${
inheritQuery
}
`
const
request
=
templateRequest
=
stringifyRequest
(
src
+
query
)
templateImport
=
`import { render, staticRenderFns } from
${
request
}
`
}
...
...
@@ -100,7 +104,7 @@ module.exports = function (source) {
if
(
descriptor
.
script
)
{
const
src
=
descriptor
.
script
.
src
||
resourcePath
const
attrsQuery
=
attrsToQuery
(
descriptor
.
script
.
attrs
,
'js'
)
const
query
=
`?vue&type=script
${
attrsQuery
}
`
const
query
=
`?vue&type=script
${
attrsQuery
}
${
inheritQuery
}
`
const
request
=
stringifyRequest
(
src
+
query
)
scriptImport
=
(
`import script from
${
request
}
\n`
+
...
...
@@ -145,6 +149,7 @@ var component = normalizer(
code
+=
genCustomBlocksCode
(
descriptor
.
customBlocks
,
resourcePath
,
resourceQuery
,
stringifyRequest
)
}
...
...
test/advanced.spec.js
View file @
0f0b09ba
...
...
@@ -28,6 +28,24 @@ test('support chaining with other loaders', done => {
})
})
test
(
'inherit queries on files'
,
done
=>
{
mockBundleAndRun
({
entry
:
'basic.vue?change'
,
modify
:
config
=>
{
config
.
module
.
rules
[
0
]
=
{
test
:
/
\.
vue$/
,
use
:
[
'vue-loader'
,
require
.
resolve
(
'./mock-loaders/query'
)
]
}
}
},
({
module
})
=>
{
expect
(
module
.
data
().
msg
).
toBe
(
'Changed!'
)
done
()
})
})
test
(
'expose filename'
,
done
=>
{
mockBundleAndRun
({
entry
:
'basic.vue'
...
...
test/mock-loaders/query.js
0 → 100644
View file @
0f0b09ba
module
.
exports
=
function
(
content
)
{
const
query
=
this
.
resourceQuery
.
slice
(
1
)
if
(
/change/
.
test
(
query
))
{
return
`
<template>
<div>Changed!</div>
</template>
<script>
export default {
data () {
return {
msg: 'Changed!'
}
}
}
</script>
`
}
return
content
}
test/utils.js
View file @
0f0b09ba
...
...
@@ -57,7 +57,7 @@ function bundle (options, cb, wontThrowError) {
config
.
module
.
rules
[
vueIndex
]
=
Object
.
assign
({},
vueRule
,
{
options
:
vueOptions
})
}
if
(
/
\.
vue
$
/
.
test
(
config
.
entry
))
{
if
(
/
\.
vue/
.
test
(
config
.
entry
))
{
const
vueFile
=
config
.
entry
config
=
merge
(
config
,
{
entry
:
require
.
resolve
(
'./fixtures/entry'
),
...
...
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