npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

vue-template-extends

v0.0.7

Published

A loader that allows you to extend templates for SFC by overriding slots.

Downloads

6

Readme

vue-template-extends

The loader allows you to extend templates for SFC by overriding slots.

Installation

Install the loader by running:

npm npm i --save vue-template-extends

Add loader to Webpack config in module.rules:

// webpack.config.js
module.exports = {
    module: {
        rules: [
            {
                resourceQuery: /blockType=template-extends/,
                loaders: ['vue-template-extends']
            }
        ]
    }
}

Usage

For example, your base component has template:

<!-- BaseComponent.vue -->
<template>
    <div>
        <slot>BaseComponent</slot>
        <slot name="header">Base header</slot>
        Some common content
    </div>
</template>

To override slots from base component, you must create in child component file custom block <template-extends> with attribute base that contains a relative path to base component template (without file extension). This block should contain <slot> tags with optional name attribute. Default name for slots is default (like in VueJs).

<!-- ChildComponent.vue -->
<template-extends base="./BaseComponent">
    <slot>ChildComponent</slot>
    <slot name="header">Child header</slot>
</template-extends>

Implementation details

When loader used for <template-extends> custom block, it gets evaluated (recursively by base-attribute) template string from parent component defined in base attribute. Then it replaces <slot>-tags content in parent template string with related (matched by name-attributes) <slot>-tags content in <template-extends>-block. All this happens on the server during build.

Then on the client-side in user's browser, evaluated template compiled by Vue.compile() to renders functions (render and staticRenderFns), that is sets as component options.

Motivation

In one of my projects I have some complex forms with small differences in some places. Unfortunately VueJs by default don't allow extends a template's blocks (like @yeld/@extends/@section in Laravel Blade).

Possible solutions that I know is:

  • Use template pre-processor for custom template engine, that supports extends templates:
    • Pug - Supported out of the box bu VueJs. But I don't like this solution because I don't wont to change all my templates to Pug-syntax just for extend some templates.
    • Nunjucks - I started to try it, but not complete, because this loader has been created.
  • Use custom loaders:

In fact this loader inspired by Vue Slot Loader and grown from the last (thanks to @SasanFarrokh).