diff --git a/README.md b/README.md index da918e0..0694171 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ npm install vueify --save-dev browserify -t vueify -e src/main.js -o build/build.js ``` -If you are using npm 3+, it no longer auto install the peer dependencies. So you will also have to also install the babel-related dependencies: +If you are using npm 3+ and **babel**, it no longer auto install the peer dependencies. So you will also have to also install the babel-related dependencies: ``` bash npm install\ @@ -121,9 +121,9 @@ Make sure to have the `NODE_ENV` environment variable set to `"production"` when If you are using Gulp, note that `gulp --production` **does not** affect vueify; you still need to explicitly set `NODE_ENV=production`. -## ES2015 by Default +## ES2015 when `babel-core` installed -Vueify automatically transforms the JavaScript in your `*.vue` components using Babel. Write ES2015 today! +Vueify automatically transforms the JavaScript in your `*.vue` components using Babel when it is installed. Write ES2015 today! The default Babel (6) options used for Vue.js components are: @@ -157,6 +157,7 @@ These are the built-in preprocessors: - jade - pug - coffee-script (use `coffee` in [config section](#configuring-options)) +- livescript ( lang="livescript" ) ## Autoprefix by Default diff --git a/lib/compiler.js b/lib/compiler.js index 09bb491..293eca7 100644 --- a/lib/compiler.js +++ b/lib/compiler.js @@ -22,6 +22,13 @@ try { hotReloadAPIPath = 'vueify/node_modules/vue-hot-reload-api' } +var hasBabel = true +try { + require('babel-core') +} catch (e) { + hasBabel = false +} + var htmlMinifyOptions = { collapseWhitespace: true, removeComments: true, @@ -291,7 +298,8 @@ function processStyle (node, filePath, id) { */ function processScript (node, filePath, content) { - var lang = checkLang(node) || 'babel' + var lang = checkLang(node) || (hasBabel ? 'babel' : null) + var script = checkSrc(node, filePath) if (!script) { script = parse5.serialize(node) diff --git a/lib/compilers/index.js b/lib/compilers/index.js index f7cbfa7..8f81d32 100644 --- a/lib/compilers/index.js +++ b/lib/compilers/index.js @@ -1,6 +1,7 @@ // built-in compilers module.exports = { coffee: require('./coffee'), + livescript: require('./livescript'), babel: require('./babel'), less: require('./less'), sass: require('./sass'), diff --git a/lib/compilers/livescript.js b/lib/compilers/livescript.js new file mode 100644 index 0000000..76a3bb4 --- /dev/null +++ b/lib/compilers/livescript.js @@ -0,0 +1,15 @@ +var options = require('./options') + +module.exports = function (raw, cb) { + try { + var ls = require('livescript') + } catch (err) { + return cb(err) + } + try { + var js = ls.compile(raw, options.coffee || {}) + } catch (err) { + return cb(err) + } + cb(null, js) +} diff --git a/lib/style-rewriter.js b/lib/style-rewriter.js index a212d0a..3639240 100644 --- a/lib/style-rewriter.js +++ b/lib/style-rewriter.js @@ -45,9 +45,16 @@ module.exports = function (id, css, scoped) { if (val) { return Promise.resolve(val) } else { - var plugins = options.postcss - ? options.postcss.slice() - : [] + var plugins = [] + var opts = {} + + if (options.postcss instanceof Array) { + plugins = options.postcss.slice() + } else if (options.postcss instanceof Object) { + plugins = options.postcss.plugins || [] + opts = options.postcss.options + } + // scoped css rewrite if (scoped) { plugins.push(addId) @@ -66,7 +73,7 @@ module.exports = function (id, css, scoped) { } currentId = id return postcss(plugins) - .process(css) + .process(css, opts) .then(function (res) { var val = { source: res.css, @@ -77,3 +84,4 @@ module.exports = function (id, css, scoped) { }) } } + diff --git a/package.json b/package.json index e11b99f..6e9e0ab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vueify", - "version": "8.5.4", + "version": "8.7.0", "description": "Vue component transform for Browserify", "main": "index.js", "repository": {