Gulp plugin for Vue.js *.vue
component file complie to AMD / CMD / CommonJS module.
Now, You can use Require.js / Sea.js ... etc. Front-end Module loader load Vue Component, not use Webpack and vue-loader.
$ npm install gulp-vue-module --save-dev
Gulpfile.js
:
var fs = require('fs');
var path = require('path');
var gulp = require('gulp');
var rename = require('gulp-rename');
var VueModule = require('gulp-vue-module');
gulp.task('vue', function() {
return gulp.src('./vue/**/*.vue')
.pipe(VueModule({
debug : true
}))
.pipe(rename({extname : ".js"}))
.pipe(gulp.dest("./dist"));
});
gulp.task('default', ['vue']);
app.vue
:
tag order :
<style>
><template>
><script>
,<tempate>
tag must be at<script>
tag before.
<style lang="scss">
$color:red;
.card {
backround: $color;
> .head {
color: $color;
background: yellow;
}
}
</style>
<template>
<div class="app" @click="click">
<p>{{a}}</p>
<list-component :msg="message"></list-component>
</div>
</template>
<script>
var Vue = require("vue");
var listComponent = require('component/list');
module.exports = Vue.extend({
data : function() {
return {
id : 23456,
message : 'Message'
}
},
methods : {
click : function() {
console.log("click()");
}
},
components: {
'list-component' : listComponent
},
template : '__template__'
});
</script>
<template>
tag unsupport set lang attribute, support setinclude="/path/to/xxx.xxx"
attribute.
<script>
tag unsupport set lang attribute, so you can't use ES6 syntax;
<style>
tag support setlang="css|scss|sass"
attribute, and support sethref="/path/to/xxx.(css|scss|sass)"
attribute link CSS file.You can use
<header-comment>
tag insert the header comments
Output :
define(function(require, exports, module){
// require.loadCSS() need you implement this function
require.loadCSS({content : ".card{backround:red}.card>.head{color:red;background:yellow}"});
var Vue = require("vue/all");
var listComponent = require('component/list');
module.exports = Vue.extend({
data : function() {
return {
id : 23456,
message : 'Message'
}
},
methods : {
click : function() {
console.log("click()");
}
},
components: {
'list-component' : listComponent
},
template : '<div class="app" @click="click"><p>{{a}}</p><list-component :msg="message"></list-component></div>'
};
});
require.loadCSS()
implement example :
require.loadCSS = function(config) {
var head = document.getElementsByTagName("head")[0];
if (config.content) {
var style = document.createElement('style');
style.type = 'text/css';
if (style.styleSheet) { // for IE
style.styleSheet.cssText = config.content;
} else {
style.innerHTML = config.content;
}
head.appendChild(style);
callback();
}
else if (config.url) {
var link = document.createElement('link');
link.href = config.url;
link.rel = 'stylesheet';
link.type = 'text/css';
head.appendChild(link);
}
};
{
debug : false, // Debug mode
amd : false, // AMD style, Define module name and deps
define : true, // Using define() wrapper the module, false for Node.js (CommonJS style)
defineName : false, // Define the module name
indent : ' ', // Indent whitespace
headerComment : true, // Using <header-comment> Insert the header comments
templateReplaceTag : '__template__', // vue component template replace tag
loadCSSMethod : 'require.loadCSS', // define the load css method for require
externalRequire : false // don't pass require as a parameter
}
You can set
externalRequire
to true and injectvue
into the file insted of requiring it internally.
The MIT license.
Copyright (C) 2016 Pandao