Package Exports
- vueify
- vueify/lib/compilers
- vueify/lib/style-rewriter
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (vueify) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
vueify

Browserify transform for Vue.js components, with scoped CSS and component hot-reloading.
This transform allows you to write your components in this format:
// app.vue
<style>
.red {
color: #f00;
}
</style>
<template>
<h1 class="red">{{msg}}</h1>
</template>
<script>
module.exports = {
data: function () {
return {
msg: 'Hello world!'
}
}
}
</script>
You can also mix preprocessor languages in the component file:
// app.vue
<style lang="stylus">
.red
color #f00
</style>
<template lang="jade">
h1(class="red") {{msg}}
</template>
<script lang="coffee">
module.exports =
data: ->
msg: 'Hello world!'
</script>
And you can import using the src
attribute (note you'll have to save the vue file to trigger a rebuild since the imported file is not tracked by Browserify as a dependency):
<style lang="stylus" src="style.styl"></style>
Under the hood, the transform will:
- extract the styles, compile them and insert them with the
insert-css
module. - extract the template, compile it and add it to your exported options.
You can require()
other stuff in the <script>
as usual. Note that for CSS-preprocessor @imports, the path should be relative to your project root directory.
Usage
npm install vueify --save-dev
browserify -t vueify -e src/main.js -o build/build.js
And this is all you need to do in your main entry file:
// main.js
var Vue = require('vue')
var appOptions = require('./app.vue')
var app = new Vue(appOptions).$mount('#app')
Enabling Pre-Processors
You need to install the corresponding node modules to enable the compilation. e.g. to get stylus compiled in your Vue components, do npm install stylus --save-dev
.
These are the built-in preprocessors:
- stylus
- less
- scss (via
node-sass
) - jade
- coffee-script
- myth
- es (ECMAScript 2015 via Babel)
Using ES2015 transform
The default options used for Babel is:
{
loose: 'all',
optional: ['runtime']
}
These options result in faster and smaller built code. This also means when using lang="es"
, you need install both babel
and babel-runtime
.
Pre-Processor Configuration
Create a vue.config.js
file at where your build command is run (usually y the root level of your project):
module.exports = function (vueify) {
// configure the options for a built-in language
vueify.option('sass', {
includePaths: [...]
})
// register a custom compile function for <script lang="es">
vueify.register({
lang: 'es',
type: 'script',
compile: function (content, cb) {
// transform the content...
cb(null, content)
}
})
}
Scoped CSS
Experimental
When a <style>
tag has the scoped
attribute, its CSS will apply to elements of the current component only. This is similar to the style encapsulation found in Shadow DOM, but doesn't require any polyfills. It is achieved by transforming the following:
<style scoped>
.example {
color: red;
}
</style>
<template>
<div class="example">hi</div>
</template>
Into the following:
<style>
.example[_v-1] {
color: red;
}
</style>
<template>
<div class="example" _v-1>hi</div>
</template>
Notes
You can include both scoped and non-scoped styles in the same component.
A child component's root node will be affected by both the parent's scoped CSS and the child's scoped CSS.
Partials are not affected by scoped styles.
Hot Reload
Experimental
To enable hot component reloading, you need to install the browserify-hmr plugin:
npm install browserify-hmr --save-dev
watchify -p browserify-hmr index.js -o bundle.js
A full setup example with hot reloading is available at vuejs/vueify-example.
Compiler API
The compiler API (originally vue-component-compiler
) is also exposed:
var compiler = require('vueify').compiler
// filePath should be an absolute path, and is optional if
// the fileContent doesn't contain src imports
compiler.compile(fileContent, filePath, function (err, result) {
// result is a common js module string
})
Syntax Highlighting
And here's a SublimeText package for enabling language highlighting/support in these embbeded code blocks.
Example
For an example setup using most of the features mentioned above, see vuejs/vueify-example.
If you use Webpack, there's also vue-loader that does the same thing.
Changelog
3.0.0
- Added support for scoped CSS and component hot reloading.
2.0.1
Built-in lang for ES2015 has been renamed from
es6
toes
.es
transforms now uses loose mode and optional runtime by default. This means in addition to installingbabel
, you should also installbabel-runtime
.Templates and CSS are now non-minified by default. To enable minification, run the build with
NODE_ENV=production
.Options for built-in pre-processors can now be configured in
vue.config.js
.vue-component-compiler
has been merged intovueify
. It is now exposed asrequire('vueify').compiler
.