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-just-ssr

v1.0.0

Published

Instantly add a Vue SSR dev-env to your repo

Downloads

46

Readme

vue-just-ssr

CLI tool to spin up a Vue SSR dev environment using your own Webpack config!

This tool is designed to add a SSR dev-env to a project with Vue and Webpack already set up, and isn't a rapid prototyping tool like Vue CLI.

🙋‍♂️ Why?

  • 🏃‍♂️ Jump start Instantly get a Vue dev environment with SSR and HMR!
  • 🎛 Full control Pass in your own Webpack config with Vue setup, we'll do the rest!
  • 🔥 Vue version agnostic Install your own version of Vue 2 and Webpack 4!

🚀 Install

npm i -D vue-just-ssr vue-server-renderer

Note: Assuming you already have webpack and vue installed, your vue-server-renderer version should match vue's

⚡️ Demos

Check out the demos to see how easily a Vue SSR + HMR dev environment can be setup in your repo.

🚦 Getting started

Webpack config

This module is designed for adding SSR to an existing Vue + Webpack codebase, but if you're starting a new one, make sure you have at least a bare miniumum Webpack config (eg. webpack.config.js) setup for a Vue app.

If you're interested in what this looks like, checkout the Webpack config in the demo.

Add the JustSsrPlugin to your Webpack config in the plugins array:

+ const { JustSsrPlugin } = require('vue-just-ssr');

  module.exports = {
      ...,

      plugins: [
          ...,
+         new JustSsrPlugin()
      ]
  }

npm script

You can use vue-just-ssr in your npm package.json scripts simply by referencing it as just-ssr.

  {
      ...,

      "scripts": {
+         "dev": "just-ssr --webpack-config <webpack config file>"
      },

      ...
  }

CLI

Alternatively, use it straight from your commandline via npx.

npx just-ssr --webpack-config <webpack config file>

🎨 Customization

Server address

Flag: --address, -a

Default: 127.0.0.1

Example: just-ssr -a 0.0.0.0

Use this flag to set the address for the server to bind to. If not provided, it checks process.env.HOST before falling back to 127.0.0.1 (or localhost).

The default address 127.0.0.1 is chosen for security reasons—it's a loopback address which means it is not exposed to the rest of your local area network (LAN). If you wish to expose the server externally, bind the address to all interfaces via 0.0.0.0 or a more specific interface address.

Server port

Flag: --port, -p

Default: 8080

Example: just-ssr --port 3333

Use this flag to set the port for the server to listen on. If not provided, it checks process.env.PORT before falling back to 8080. If the port is taken, it will choose a random available port.

Template

Flag: --template, -t

Default: /lib/template.html

Example: just-ssr --template ./dev/template.html

Use this flag to pass in your own template for the entire page's HTML with the --template flag. The template should contain a comment <!--vue-ssr-outlet--> which serves as the placeholder for rendered app content.

Read the official Vue docs for more information.

👉 Checkout the Template metadata demo to see a working example

Create App

Default: /lib/src/create-app.js

You can pass in a custom create-app.js file to gain more control over your app. For example, you can use this to set up routing or other app-level integrations.

The create-app.js file is introduced in Vue's SSR guide. It must default-export a function that returns the Vue app. Any setup code for the app can live here:

create-app.js

import Vue from 'vue'

/* Import plugins here */

function createApp(App) {
    const app = new Vue({
      render: h => h(App)
    })

    return { app }
}

export default createApp

Pass in the path to create-app.js via the createAppPath property in the Webpack plugin:

  const { JustSsrPlugin } = require('vue-just-ssr');

  module.exports = {
      ...,

      plugins: [
          ...,
          new JustSsrPlugin({
+             createAppPath: './path-to/create-app.js'
          })
      ]
  }

Vue router

If you want to add routing, install Vue Router (npm i vue-router) and add it to your custom create-app file.

The Vue SSR guide recommends organizing your router in a separate file (eg. create-router.js) that exports a createRouter function and importing it into create-app.js.

In your App entry-point, simply render <router-view />.

create-app.js

import Vue from 'vue'
import createRouter from './create-router'

function createApp(App) {
    const router = createRouter()

    const app = new Vue({
        render: h => h(App),
        router
    })

    return { app }
}

export default createApp

create-router.js

import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)

function createRouter() {
    return new Router({
        mode: 'history',
        routes: [
            {
                path: '/',
                component: () => import('./pages/Home.vue')
            }
        ]
    })
}

export default createRouter

👉 Checkout the Vue Router demo to see a working example

Client/Server Webpack plugins

If you have plugins that you only want running on the client or server-build, you can wrap them in clientOnly and serverOnly functions.

For example, if you want ESLintPlugin to only run on the client-build, you can modify your Webpack config like so:

  const {
      JustSsrPlugin,
+     clientOnly
  } = require('vue-just-ssr');
  
  module.exports = {
      ...,
  
      plugins: [
          ...,

          new JustSsrPlugin(),

+         clientOnly(
              new ESLintPlugin({
                  files: '**/*.{vue,js}',
                  emitWarning: true
              })
+         )
      ]
  };