Security News
Fluent Assertions Faces Backlash After Abandoning Open Source Licensing
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
vite-plugin-node
Advanced tools
A vite plugin to allow you to use vite as node dev server.
esbuild
or swc
to compile your typescript filesInstall vite and this plugin with your favorite package manager, here use npm as example:
npm install vite vite-plugin-node -D
Create a vite.config.ts
file in your project root to config vite to actually use this plugin:
import { defineConfig } from 'vite';
import { VitePluginNode } from 'vite-plugin-node';
export default defineConfig({
// ...vite configures
server: {
// vite server configs, for details see [vite doc](https://vitejs.dev/config/#server-host)
port: 3000
},
plugins: [
...VitePluginNode({
// Nodejs native Request adapter
// currently this plugin support 'express', 'nest', 'koa' and 'fastify' out of box,
// you can also pass a function if you are using other frameworks, see Custom Adapter section
adapter: 'express',
// tell the plugin where is your project entry
appPath: './app.ts',
// Optional, default: 'viteNodeApp'
// the name of named export of you app from the appPath file
exportName: 'viteNodeApp',
// Optional, default: 'esbuild'
// The TypeScript compiler you want to use
// by default this plugin is using vite default ts compiler which is esbuild
// 'swc' compiler is supported to use as well for frameworks
// like Nestjs (esbuild dont support 'emitDecoratorMetadata' yet)
tsCompiler: 'esbuild'
})
]
});
Update your server entry to export your app named viteNodeApp
or the name you configured.
const app = express();
// your beautiful code...
if (import.meta.env.PROD) {
app.listen(3000);
}
export const viteNodeApp = app;
import Koa from 'koa';
const app = new Koa();
// your beautiful code...
if (import.meta.env.PROD) {
app.listen(3000);
}
export const viteNodeApp = app;
import fastify from 'fastify';
const app = fastify();
// your beautiful code...
if (import.meta.env.PROD) {
app.listen(3000);
}
export const viteNodeApp = app;
if the app created by an async factory function you can just export the promise.
import fastify from 'fastify';
const app = async (options) => {
const app = fastify(options);
// app logics...
return app;
};
// note here we need to run the function to get the promise.
export const viteNodeApp = app(options);
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
if (import.meta.env.PROD) {
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
}
export const viteNodeApp = NestFactory.create(AppModule); // this returns a Promise, which is ok, this plugin can handle it
Add a npm script to run the dev server:
"scripts": {
"dev": "vite"
},
Run the script! npm run dev
If your favorite framework not supported yet, you can either create an issue to request it or use the adapter
option to tell the plugin how to pass down the request to your app. You can take a look how the supported frameworks implementations from the ./src/server
folder.
Example:
import { defineConfig } from 'vite';
import { VitePluginNode } from 'vite-plugin-node';
export default defineConfig({
plugins: [
...VitePluginNode({
adapter: function (app, req, res) {
app(res, res);
},
appPath: './app.ts'
})
]
});
This plugin leverages Vite library mode to build your app. Currently only works with express
and koa
frameworks due to node builtin etc, see example in the examples folder(will try my best to make other framework works).
See the examples folder.
While frontend development tooling is evolving rapidly in recent years, backend DX is still like in stone age. No hot module replacement; Typescript recompiling slow as funk; Lack of plugin system etc. Thanks to Vite.js created by Evan You (A.K.A creator of vue.js; my biggest idol developer), makes all those dreams for backend development come true!
Vite by design has a middleware mode, which allows us to use it programmatically inside other modules. It's originally made for SSR, so that for each request, vite can load the renderer and render the latest changes you made to your app (https://vitejs.dev/guide/ssr.html). This plugin leverages this feature to load and execute your server app entry.
You may ask, isn't super slow, since it re-compiles/reloads the entire app? The answer is NO, because vite is smart. It has a builtin module graph as a cache layer, the graph is built up the first time your app loads. After that, when you update a file, vite will only invalidate that one and its parent modules, so that for next request, only those invalidated modules need to be re-compiled which is super fast thanks to esbuild or swc.
As this plugin just fresh developed, there are still lots ideas need to be implemented, including:
Please create an issue if you found any bugs, to help me improve this project!
0.0.16
FAQs
Vite plugin to enable your node server HMR
The npm package vite-plugin-node receives a total of 20,254 weekly downloads. As such, vite-plugin-node popularity was classified as popular.
We found that vite-plugin-node demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
Research
Security News
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
Security News
The UK is proposing a bold ban on ransomware payments by public entities to disrupt cybercrime, protect critical services, and lead global cybersecurity efforts.