vikseriq / vuelab
PHP loader for Vue Single File Components
Installs: 4
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/vikseriq/vuelab
Requires
- php: >=5.4
This package is auto-updated.
Last update: 2025-10-09 10:21:19 UTC
README
It's tiny tool that helps to integrate Vue (v.2) with all reactivity benefits to almost every PHP project on any PHP hosting – without need of heavy-weight loaders like webpack/rollup nor gulp/require.js.
Also available as WordPress plugin: just drop in /wp-content/plugins folder.
Vue components composes with vuer utility
and injects with simple html container + new Vue vueLauncher technique.
Additionally it uses lessphp for processing styles written in less.
Note that Vue 3, ES6/module exports, template languages, loading by src and so on not supported
– loader do not process nor evaluate js on server side,
only composing *.vue into valid ES5 scripts and boot instances.
Template compilation relies on Vue built-in template compiler, so you must use full version of vue.js lib, not runtime-only.
Usage
- Clone this repo – or load via composer:
composer require vikseriq/vuelab
-
Include
vuelab.php– or use composer autoload. -
Provide path to dir with Vue single file components. Or drop some into
/vuelab/components. -
Register components – just by typing component names.
-
Place somewhere html element with class
js-v-scope– it will indicate vuelab to start Vue instance it this container. -
And call
vuelab_inject(). Now your PHP page become a first-class Vue app.
Assume that we have app.vue that loads todo-list.vue with todo.vue inside.
Drop vuelab and create index.php looking like:
include '/vuelab/vuelab.php'; vuelab_setup(__DIR__, ['app', 'todo-list', 'todo']); vuelab_append('<div class="js-v-scope"><app /></div>'); vuelab_inject();
That's all.
Usage on WordPress
-
Add plugin to Wordpress: via upload or copy to plugins dir.
-
Enable plugin from
Pluginspage – it will hook automatically. -
Just use it: register components and their placeholders on desired page areas.
For example, place foo.vue inside your template folder and add in functions.php:
// register component located in current path named foo.vue vikseriq\vuelab\vuelab_setup(__DIR__, ['foo']); // register placement for `foo` component - it will placed where `vuelab_inject` executed, in this case - at footer vikseriq\vuelab\vuelab_append('<div class="js-v-scope"><foo /></div>'); // optionally: enable less styles compilation vikseriq\vuelab\VueLab::$use_less = true;
<template> <div class="foo">Hello from Vue <span>{{ createdAt }}</span></div> </template> <script> Vue.component('foo', { template: template, // ! it allows to pass template inside component data: function () { return { createdAt: new Date().toLocaleTimeString() } } }) </script> <style lang="less"> // feel free to use less here @justOrange: #fc0; .foo { display: block; margin: 1rem auto; padding: 1rem; width: fit-content; // sample use of less variables border: 3px outset @justOrange; // ... and nesting span { font-style: italic; } } </style>
Then on the very bottom of pages will be foo component with greeting and current page loading time.
Documentation
Vuelab
Vuelab::inject
Returns HTML string with Vue components, styles and launcher.
-
Composes script+template bundle with every component via vuer.
-
Wrap bundle in js function and bind execution on
document.vueReadyevent to prevent evaluation before Vue and vueLauncher is ready. -
Appends vueLauncher code with trimmed space and comments.
-
Process bundle styles.
-
If
\VueLab::$use_lessis set – load less compiler and process styles. -
Appends rest of html added via
\VueLab::append.
Vuer – load Vue SFC with PHP
Vuer used to convert *.vue files to browser-executable <script>
Inspired by requirejs-vue technique.
VueLauncher – make a Vue instance anywhere
VueLauncher helps boot Vue instance on any html container,
by default used selector .js-v-scope.
WordPress plugin
Install by uploading archive with this repos or by using awesome GitHub Updater plugin.
When \VueLab::$wp_enqueue_vue flag is set, Vue wp_enqueue_script-ed
as vue from path specified in \VueLab::$wp_vuejs_path.
Obviously, for better loading time and use with cache/packer plugins
provide path to local copy of vue.min.js.
Things to do
[+] Sample project.
[_] Pass variables (like string translations) to Vue component via __v on build time.
[+] Make Vuelab available as Composer package.
License
MIT © 2020 - present, vikseriq