This package attempts to provide a core set of functionality for Vue SSR apps, including a single point of update for as many related dependencies as possible.
- 2 Webpack builds for Vue SSR
- Client build
- Server build
- Base
entry-client.js
logic - Base
entry-server.js
logic - Express middleware for rendering using the client manifest and server bundle
- Logic for including Webpack HMR for the client bundle and middleware
eslint@6.8.0
jest@24.9.0
vue@2.6.12
vue-loader@15.8.3
vue-server-renderer@2.6.12
webpack@4.41.5
At one point in time, I found myself maintaining 3 or 4 separate Vue SSR apps. All of which had stemmed from the same basic approach documented in Vue's Official SSR Guide. However, the process of maintaining multiple separate apps was complicated for multiple reasons:
- When a new version of any Vue-related dependency was released, manual updates were required in each app:
- This included production dependencies, such as
vue
orvue-server-renderer
- But it also meant all development dependencies, such as
vue-loader
,babel-loader
,sass-loader
, etc.
- This included production dependencies, such as
- Beyond that, all of the apps were being linted and unit tested in the same ways, so whenever those underlying frameworks were updated, it again required duplicate updates across multiple apps:
eslint
,jest
,eslint-plugin-vue
,jest-serializer-vue
, etc.
- Often, while working in a single app, a new approach would occur to me that would enhance the logic being used for the core Vue SSR approach within the app. This change would then need to be ported to each of the other apps
- Build adjustments (base, client, server, or middleware)
- Adjustments to the
fetchData
approach - Dynamic vuex module support
- Routing logic alterations
Needless to say, all of that was tedious, time consuming, and annoying.
The primary goals of this library are:
- Provide a baseline webpack setup for a Vue SSR app
- Provide the baseline implementation of a Vue SSR app, limited to client/server entry points and base Vue SSR HTML rendering
- This includes HMR support if desired by the client
- Provide customization points to extend both of the above areas as needed
- Provide a single set of compatible
devDependencies
packaged together such that the client app can just includevue-ssr-build
as adevDependency
- Note that
vue
andvue-server-renderer
arepeerDependencies
so they will need to be included asdependencies
appropriately
- Note that
The following are currently non-goals of this repository:
- Provide any baseline components, layout, or themeing logic for your app. You are expected the build the Component-based app in it's entirety, and provide a
createApp
function tovue-ssr-build
- Provide a server implementation. You are expected to create youe own
express
server and use the renderer middleware provided by this repo. - Providing any build execution scripts. You will be required to setup all of your scripts/tasks to build and run your app
- Provide any CLI or scaffolding support for your app. This will likely include a small
demo
folder which will show an example of how to usevue-ssr-build
, but at the moment you will be required to copy or mimic those files in your app