Skip to content

Commit 56e845d

Browse files
committed
feat: support pre/post loaders for language blocks
1 parent 497e482 commit 56e845d

File tree

5 files changed

+50
-1
lines changed

5 files changed

+50
-1
lines changed

lib/loader.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ module.exports = function (content) {
8484
// check if there are custom loaders specified via
8585
// webpack config, otherwise use defaults
8686
var loaders = Object.assign({}, defaultLoaders, options.loaders)
87+
var preLoaders = options.preLoaders || {}
88+
var postLoaders = options.postLoaders || {}
8789

8890
function getRequire (type, part, index, scoped) {
8991
return 'require(' +
@@ -161,6 +163,18 @@ module.exports = function (content) {
161163
}
162164

163165
function getLoaderString (type, part, index, scoped) {
166+
var loader = getRawLoaderString(type, part, index, scoped)
167+
var lang = part.lang || defaultLang[type]
168+
if (preLoaders[lang]) {
169+
loader = loader + ensureBang(preLoaders[lang])
170+
}
171+
if (postLoaders[lang]) {
172+
loader = ensureBang(postLoaders[lang]) + loader
173+
}
174+
return loader
175+
}
176+
177+
function getRawLoaderString (type, part, index, scoped) {
164178
var lang = part.lang || defaultLang[type]
165179
var loader = loaders[lang]
166180
var rewriter = type === 'styles' ? styleRewriter + (scoped ? '&scoped=true!' : '!') : ''

test/mock-loaders/css.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports = function (content) {
2+
return content.replace(/#f00/, '#00f')
3+
}

test/mock-loaders/html.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports = function (content) {
2+
return content.replace(/red/, 'green')
3+
}
File renamed without changes.

test/test.js

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ describe('vue-loader', function () {
524524
})
525525

526526
it('support chaining with other loaders', done => {
527-
const mockLoaderPath = require.resolve('./mock-loader')
527+
const mockLoaderPath = require.resolve('./mock-loaders/js')
528528
test({
529529
entry: './test/fixtures/basic.vue',
530530
module: {
@@ -654,4 +654,33 @@ describe('vue-loader', function () {
654654
done()
655655
})
656656
})
657+
658+
it('pre/post loaders', done => {
659+
test({
660+
entry: './test/fixtures/basic.vue',
661+
vue: {
662+
preLoaders: {
663+
js: require.resolve('./mock-loaders/js'),
664+
css: require.resolve('./mock-loaders/css')
665+
},
666+
postLoaders: {
667+
html: require.resolve('./mock-loaders/html')
668+
}
669+
}
670+
}, (window, module) => {
671+
var vnode = mockRender(module, {
672+
msg: 'hi'
673+
})
674+
// <h2 class="green">{{msg}}</h2>
675+
expect(vnode.tag).to.equal('h2')
676+
expect(vnode.data.staticClass).to.equal('green')
677+
expect(vnode.children[0]).to.equal('hi')
678+
679+
expect(module.data().msg).to.contain('Changed!')
680+
var style = window.document.querySelector('style').textContent
681+
style = normalizeNewline(style)
682+
expect(style).to.contain('comp-a h2 {\n color: #00f;\n}')
683+
done()
684+
})
685+
})
657686
})

0 commit comments

Comments
 (0)