Tree view for your demo components. Demo.
npm install -D vue-book
yarn add -D vue-book
I'll talk a bit about demo based workflow I employ in my projects.
Before doing any work on component I create a demo. Demo allows me to define an interface, like this:
<my-new-component v-model="dataItem" :some-prop="prop"/>
Only then I start to work on component.
You can think of demo as of semi-manual unit tests. But why not use actual unit tests, you'll ask. Let me explain.
Of course, this doesn't mean that you have to dump unit tests. Just keep them for appropriate tasks. Like logic heavy classes.
So, back to the library. The main intent behind is simplifying demo workflow as much as possible. Just toss your demos into folder and enjoy tree generation.
Attach VueComponentTree to your router. And yes, vue-router is required.
import Router from 'vue-router'
import { createRoute } from 'vue-book'
const router = new Router({
routes: [
createRoute({
requireContext: require.context('./..', true, /.demo.vue$/),
path: '/demo',
hideFileExtensions: true, // optional, hides file extensions in list.
hideNavigation: true, // optional, hides navigation panel. Intended to be used with visual recognition library.
}),
]
})
So, about arguments.
require.context('./../tree', true, /.vue$/), '/demo'
./../tree
is path to your demo folder. Works the same as require/import./demo
is root route for vue-router.Here's the vue-cli3 demo project if something doesn't work for you.
You don't have to keep demos in production. Use webpack define-plugin and exclude them from bundle.
if (process.env.NODE_ENV !== 'production') {
const createRoute = require('vue-book').createRoute
routes.push([
createRoute({
requireContext: require.context('./..', true, /.demo.vue$/),
path: '/demo',
}),
])
}
yarn serve
- run dev server;yarn demo
- compile assets;yarn dist
- compile assets;npm publish
- publish to npm.You can use vue-book
without router if you don't need it.
const getComponent = require('vue-book').getComponent
const DemoView = getComponent({
requireContext: require.context('./..', true, /.demo.vue$/),
})
You can handle resulting DemoView
the same as any other vue component.
Leave an issue if something doesn't work for you.
Also remember: Stars fuel package development!
MIT