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

@11ty/eleventy-plugin-vue

v0.8.0

Published

Use Vue.js single file components in Eleventy.

Downloads

504

Readme

eleventy-plugin-vue for Vue 2 🕚⚡️🎈🐀

Zero bundle size server-rendered components for Vue.js.

Read more about the goals of this plugin (and a full tutorial!) at Eleventy and Vue, a match made to power Netlify.com

Installation

npm install @11ty/eleventy-plugin-vue
  • 0.8.x is encouraged to use Eleventy 2.0.0 (and Node 14+)

  • 0.7.x is encouraged to use Eleventy 1.0.0 (and Node 12+)

  • 0.2.x is encouraged to use Eleventy 0.11.1 or newer (for incremental Vue component builds)

  • 0.1.x requires Eleventy 0.11.0 or newer

  • 0.0.x requires Eleventy 0.11.0 Beta 2 or above (0.11.0-beta.2)

  • Requires experimental features in Eleventy, specifically: Custom File Extension Handlers feature from Eleventy. Opt in to experimental features on Eleventy by running ELEVENTY_EXPERIMENTAL=true npx @11ty/eleventy.

Changelog

  • 0.3.0 (Milestone) More consistent incremental builds. Performance improvements.
  • 0.2.1 (Milestone) adds incremental builds for Eleventy Vue components to avoid unnecessary repeat work. Fixes bug with permalink strings returned from Vue Single File Component data.
  • 0.1.x converted to use a Single File Components for everything (templates, components, etc), instead of 0.0.x’s string templates with front matter.

Features

  • Builds *.vue’s Single File Components, both in the input directory and in Eleventy’s includes directory. .vue files in the includes directory are available for import but only those outside of the includes directory result in output files.
  • Works with Vue’s Single File Components, including with scoped CSS.
  • Data from single file components feeds into the data cascade (similar to front matter)
  • All JavaScript Template Functions (see https://www.11ty.dev/docs/languages/javascript/#javascript-template-functions), Universal Filters, Universal Shortcodes, Universal Paired Shortcodes are available as Vue methods (global functions to use in templates and child components).
  • page Eleventy supplied data is also available globally in all components.

Not Yet Available

  • Traditional Vue.js “Page templates” (think <!--vue-ssr-outlet-->) as layouts.
    • Using .vue templates as Eleventy layouts is not yet supported. Subscribe to this issue at #26.
  • Does not yet embed any client-side JavaScript from inside single file components into the output for use on the client. Any JavaScript embedded there is used only for rendering templates in the build and does not show up in the output.
    • Note that if this is added in the future, it will likely be an opt-in feature.
  • lang on <template>, <style>, or <script> is not yet supported.
  • Windows support

Warnings

  • Adding a <!doctype html> to a Vue template is not supported by Vue. For this reason it is recommended to use a different template syntax for your layout (until Vue.js Page Templates support is added per the note above).

Usage

Add to Configuration File

Usually .eleventy.js:

const eleventyVue = require("@11ty/eleventy-plugin-vue");

module.exports = function(eleventyConfig) {
  // Use Defaults
  eleventyConfig.addPlugin(eleventyVue);
};

Customize with Options

const eleventyVue = require("@11ty/eleventy-plugin-vue");

module.exports = function(eleventyConfig) {
  // OR, Use your own options
  eleventyConfig.addPlugin(eleventyVue, {
    // Directory to store compiled Vue single file components
    cacheDirectory: ".cache/vue/",

    // Pass in a file or multiple .vue files to limit compilation
    // If this is empty, the plugin will search for all *.vue files
    input: [],

    // Use postcss in the single file components
    rollupPluginVueOptions: {
      style: {
        postcssPlugins: [
          require("autoprefixer"),
          require("postcss-nested")
        ]
      }
    }

    // Passed to rollup.rollup
    rollupOptions: {
      // Declare your own external dependencies
      external: [],

      // Use your own Rollup plugins
      plugins: [],
    },
  });
};

For a full list of rollupPluginVueOptions, see rollup-plugin-vue’s Options.

Advanced: Use with eleventy-assets

Compatible with @11ty/eleventy-plugin-vue 0.0.5 and newer.

Eleventy’s Assets plugin lets you manage your own Inline CSS or JavaScript. For the first version of the Eleventy Vue plugin, you can reuse an existing CSS code manager from eleventy-assets add CSS from your Vue.js Single File Components too.

const eleventyVue = require("@11ty/eleventy-plugin-vue");
const { InlineCodeManager } = require("@11ty/eleventy-assets");

module.exports = function(eleventyConfig) {
  let myCssManager = new InlineCodeManager();

  eleventyConfig.addPlugin(eleventyVue, {
    // Re-use an existing `eleventy-assets` Manager
    assets: {
      css: myCssManager
    }
  });
};

Advanced: Run async things before component render

Available with Eleventy 1.0+ and Eleventy Vue Plugin 0.6+

Use serverPrefetch to tell the component to do a few async things before it renders the component.

Below is an example of a Vue template that uses the Eleventy Render Plugin to render Markdown (either in an external file or a string).

<template>
  <header v-html="content"/>
</template>
<script>
export default {
  async serverPrefetch() {
    // let content = await this.renderFile("./_includes/blogpost.md", "md");
    this.content = await this.renderTemplate("# Title", "md");
  }
}
</script>

Relevant Links

  • https://ssr.vuejs.org/
  • https://vuejs.org/v2/guide/single-file-components.html
  • https://vue-loader.vuejs.org/guide/scoped-css.html
  • https://rollup-plugin-vue.vuejs.org/
  • https://rollupjs.org/guide/en/

TODO

  • Custom Directives?
  • How to render Vue templates inside of other template files, including Markdown?