Skip to content
This repository was archived by the owner on Dec 26, 2018. It is now read-only.

Commit 2b31cb0

Browse files
committed
update config format
1 parent bf88b55 commit 2b31cb0

File tree

4 files changed

+48
-81
lines changed

4 files changed

+48
-81
lines changed

lib/compiler.js

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ var parser = new parse5.Parser()
66
var serializer = new parse5.TreeSerializer()
77
var hash = require('hash-sum')
88
var compilers = require('./compilers')
9+
var options = require('./compilers/options')
910
var rewriteStyle = require('./style-rewriter')
1011
var rewriteTemplate = require('./template-rewriter')
1112
var Emitter = require('events').EventEmitter
@@ -23,8 +24,31 @@ if (process.env.NODE_ENV === 'production') {
2324

2425
// expose compiler
2526
var compiler = module.exports = new Emitter()
26-
compiler.register = compilers.register
27-
compiler.loadConfig = compilers.loadConfig
27+
28+
// load user config
29+
compiler.loadConfig = function () {
30+
var fs = require('fs')
31+
var path = require('path')
32+
var configPath = path.resolve(process.cwd(), 'vue.config.js')
33+
if (fs.existsSync(configPath)) {
34+
compiler.applyConfig(require(configPath))
35+
}
36+
}
37+
38+
// apply config
39+
compiler.applyConfig = function (config) {
40+
// copy user options to default options
41+
Object.keys(config).forEach(function (key) {
42+
if (key !== 'customCompilers') {
43+
options[key] = config[key]
44+
} else {
45+
// register compilers
46+
Object.keys(config[key]).forEach(function (name) {
47+
compilers[name] = config[key][name]
48+
})
49+
}
50+
})
51+
}
2852

2953
/**
3054
* Compile a .vue file.
@@ -173,7 +197,7 @@ function isScoped (node) {
173197
function processTemplate (node, filePath, id, hasScopedStyle) {
174198
var template = checkSrc(node, filePath) || serializeTemplate(node)
175199
var lang = checkLang(node)
176-
return compileAsPromise('template', template, compilers.template[lang])
200+
return compileAsPromise('template', template, lang)
177201
.then(function (res) {
178202
if (hasScopedStyle) {
179203
return rewriteTemplate(id, res.source)
@@ -201,7 +225,7 @@ function processTemplate (node, filePath, id, hasScopedStyle) {
201225
function processStyle (node, filePath, id) {
202226
var style = checkSrc(node, filePath) || serializer.serialize(node)
203227
var lang = checkLang(node)
204-
return compileAsPromise('style', style, compilers.style[lang])
228+
return compileAsPromise('style', style, lang)
205229
.then(function (res) {
206230
if (isScoped(node)) {
207231
return rewriteStyle(id, res.source)
@@ -228,7 +252,7 @@ function processStyle (node, filePath, id) {
228252
function processScript (node, filePath) {
229253
var script = checkSrc(node, filePath) || serializer.serialize(node).trim()
230254
var lang = checkLang(node) || 'babel'
231-
return compileAsPromise('script', script, compilers.script[lang])
255+
return compileAsPromise('script', script, lang)
232256
}
233257

234258
/**
@@ -300,11 +324,12 @@ function serializeTemplate (node) {
300324
*
301325
* @param {String} type
302326
* @param {String} source
303-
* @param {Function} [compile]
327+
* @param {String} lang
304328
* @return {Promise}
305329
*/
306330

307-
function compileAsPromise (type, source, compile) {
331+
function compileAsPromise (type, source, lang) {
332+
var compile = compilers[lang]
308333
if (compile) {
309334
return new Promise(function (resolve, reject) {
310335
compile(source, function (err, res) {

lib/compilers/index.js

Lines changed: 9 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,11 @@
1-
var options = require('./options')
2-
31
// built-in compilers
4-
var compilers = module.exports = {
5-
script: {
6-
coffee: require('./coffee'),
7-
babel: require('./babel'),
8-
// backwards compat
9-
es: require('./babel')
10-
},
11-
style: {
12-
less: require('./less'),
13-
sass: require('./sass'),
14-
scss: require('./sass'),
15-
stylus: require('./stylus'),
16-
myth: require('./myth')
17-
},
18-
template: {
19-
jade: require('./jade')
20-
}
21-
}
22-
23-
/**
24-
* Register a custom pre-processor for a given language.
25-
*
26-
* @param {Object} opts
27-
* - lang {String}
28-
* - type {String}
29-
* - compile {Function}
30-
*/
31-
compilers.register = function registerCompiler (opts) {
32-
if (!opts.lang) {
33-
return warn('missing language')
34-
}
35-
if (!opts.type) {
36-
return warn('missing file type')
37-
}
38-
if (!opts.compile || typeof opts.compile !== 'function') {
39-
return warn('missing compile function')
40-
}
41-
if (!compilers[opts.type]) {
42-
return warn(
43-
'invalid file type: ' + opts.type +
44-
' (valid types: script|style|template)'
45-
)
46-
}
47-
compilers[opts.type][opts.lang] = opts.compile
48-
}
49-
50-
// check for config file
51-
compilers.loadConfig = function () {
52-
var fs = require('fs')
53-
var path = require('path')
54-
var configPath = path.resolve(process.cwd(), 'vue.config.js')
55-
if (fs.existsSync(configPath)) {
56-
require(configPath)({
57-
register: compilers.register,
58-
option: function (name, opts) {
59-
options[name] = opts
60-
}
61-
})
62-
}
63-
}
64-
65-
function warn (msg) {
66-
console.warn(
67-
'[vue-component-compiler] Error attempting to' +
68-
'register custom compiler: ' + msg
69-
)
2+
module.exports = {
3+
coffee: require('./coffee'),
4+
babel: require('./babel'),
5+
less: require('./less'),
6+
sass: require('./sass'),
7+
scss: require('./sass'),
8+
stylus: require('./stylus'),
9+
myth: require('./myth'),
10+
jade: require('./jade')
7011
}

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
},
2222
"homepage": "https://github.com/vuejs/vueify",
2323
"dependencies": {
24+
"autoprefixer": "^6.0.3",
2425
"babel": "^5.8.23",
2526
"clean-css": "^3.4.4",
2627
"es6-promise": "^3.0.2",

test/test.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ var assert = require('assert')
55
var hash = require('hash-sum')
66

77
// test custom transform
8-
compiler.register({
9-
lang: 'test',
10-
type: 'script',
11-
compile: function (content, cb) {
12-
content = content.replace('not ', '')
13-
cb(null, content)
8+
compiler.applyConfig({
9+
customCompilers: {
10+
test: function (content, cb) {
11+
content = content.replace('not ', '')
12+
cb(null, content)
13+
}
1414
}
1515
})
1616

0 commit comments

Comments
 (0)