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-options-api-constants-plugin

v1.0.1

Published

Adds a constants section to your Options API components.

Downloads

78

Readme

Vue Options API Constants Plugin

Adds a constants section to your Options API components.

Use

  1. npm install --save vue-options-api-constants-plugin
  2. Import the plugin into your main.js and then app.use it, like so:
    import { createApp } from 'vue';
    import constantsPlugin from 'vue-options-api-constants-plugin';
       
    const app = createApp({});
    app.use(constantsPlugin);
    app.mount('#app');
  3. In any of your Options API components, you can now add a top level constants object, like so:
    <template>
      <div>
        {{ BRAND_NAME }}
      </div>
    </template>
    
    <script>
    import { BRAND_NAME } from './constants.js';
    
    export default {
      name: 'AnExample',
      constants: {
        BRAND_NAME
      }
    };
    </script>

Use via CDN

<!DOCTYPE html>
<html>
  <head>
    <title>Example</title>
    <script src="https://unpkg.com/[email protected]/dist/vue.global.prod.js"></script>
    <script src="https://unpkg.com/[email protected]/cdn.js"></script>
  </head>
  <body>
    <div id="app">
      {{ AN_EXAMPLE }}
    </div>
    <script>
      const AN_EXAMPLE = 'An example';

      const app = Vue.createApp({
        constants: {
          AN_EXAMPLE
        }
      });
      app.use(window.constantsPlugin);
      app.mount('#app');
    </script>
  </body>
</html>

Benefits

  • The constants are frozen as computed properties under the hood, so you cannot mutate them, and if you attempt, you'll get a warning in the console.
  • Gives you separation of concerns and code organization by having a place for all constants to live in each component.

Why not use data, setup, computed or methods?

  • data and setup sections would create reactive and mutatable variables, which you don't want for your constants.
  • computed section works, but adds a lot of boilerplate that this plugin is abstracting away for you.
  • methods section would have the same boilerplate as the computed, and additional boilerplate in the template ({{ AN_EXAMPLE() }}) and in the scripts (this.AN_EXAMPLE())

Downsides

  • Ctrl+Click from the template to the defintion doesn't work with Intellisense/VSCode. However, this may be fixable with some editor hints, as other tools, like Vuelidate and Pinia don't have this issue. If you know how to fix this, create a PR.
  • This is a plugin, so by definition it is non-standard. However, there is nothing I can do about that as Vue's core team (read: Evan) does not want this feature in Vue itself, despite it being a very common need. Perhaps, if this plugin becomes popular (tell your friends), then it would be more likely to be officially added into Vue.