Skip to content

Commit 1d2e2b6

Browse files
committed
test for custom compiler modules
1 parent d353739 commit 1d2e2b6

File tree

5 files changed

+63
-4
lines changed

5 files changed

+63
-4
lines changed

lib/loader.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,11 @@ module.exports = function (content) {
8080
id: moduleId,
8181
transformToRequire: options.transformToRequire,
8282
preserveWhitespace: options.preserveWhitespace,
83-
buble: options.buble
83+
buble: options.buble,
84+
// only pass compilerModules if it's a path string
85+
compilerModules: typeof options.compilerModules === 'string'
86+
? options.compilerModules
87+
: undefined
8488
})
8589

8690
var defaultLoaders = {

lib/template-compiler.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,30 @@ var compiler = require('vue-template-compiler')
44
var beautify = require('js-beautify').js_beautify
55
var transpile = require('vue-template-es2015-compiler')
66
var hotReloadAPIPath = normalize.dep('vue-hot-reload-api')
7-
var transformRequire = require('./template-transform-require')
7+
var transformRequire = require('./template-compiler-modules/transform-require')
88

9-
var defaultCompileModules = [transformRequire]
9+
var defaultCompilerModules = [transformRequire]
1010

1111
module.exports = function (html) {
1212
this.cacheable()
1313
var isServer = this.target === 'node'
1414
var isProduction = this.minimize || process.env.NODE_ENV === 'production'
15+
var vueOptions = this.options.__vueOptions__ || {}
1516
var options = loaderUtils.getOptions(this) || {}
1617

1718
// set user transformToRequire options on module
1819
transformRequire._userOptions = options.transformToRequire
1920

21+
// user compiler modules
22+
var userCompilerModules = options.compilerModules || vueOptions.compilerModules
23+
// for HappyPack cross-process use cases
24+
if (typeof userCompilerModules === 'string') {
25+
userCompilerModules = require(userCompilerModules)
26+
}
27+
2028
var compiled = compiler.compile(html, {
2129
preserveWhitespace: options.preserveWhitespace,
22-
modules: defaultCompileModules.concat(options.modules || [])
30+
modules: defaultCompilerModules.concat(userCompilerModules || [])
2331
})
2432

2533
// tips
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module.exports = [
2+
{
3+
postTransformNode: el => {
4+
if (el.staticClass) {
5+
el.staticClass = '"red blue"'
6+
}
7+
}
8+
}
9+
]

test/test.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -700,4 +700,42 @@ describe('vue-loader', function () {
700700
done()
701701
})
702702
})
703+
704+
it('custom compiler modules', done => {
705+
test({
706+
entry: './test/fixtures/basic.vue',
707+
vue: {
708+
compilerModules: [
709+
{
710+
postTransformNode: el => {
711+
if (el.staticClass) {
712+
el.staticClass = '"red blue"'
713+
}
714+
}
715+
}
716+
]
717+
}
718+
}, (window, module) => {
719+
var vnode = mockRender(module, {
720+
msg: 'hi'
721+
})
722+
expect(vnode.data.staticClass).to.equal('red blue')
723+
done()
724+
})
725+
})
726+
727+
it('custom compiler modules (string)', done => {
728+
test({
729+
entry: './test/fixtures/basic.vue',
730+
vue: {
731+
compilerModules: require.resolve('./fixtures/custom-compiler-module')
732+
}
733+
}, (window, module) => {
734+
var vnode = mockRender(module, {
735+
msg: 'hi'
736+
})
737+
expect(vnode.data.staticClass).to.equal('red blue')
738+
done()
739+
})
740+
})
703741
})

0 commit comments

Comments
 (0)