https://github.com/eviltik/devsrv
one line command self signed certificate https server
https://github.com/eviltik/devsrv
Last synced: 6 months ago
JSON representation
one line command self signed certificate https server
- Host: GitHub
- URL: https://github.com/eviltik/devsrv
- Owner: eviltik
- License: mit
- Created: 2022-02-16T13:49:07.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2022-03-23T11:26:55.000Z (over 4 years ago)
- Last Synced: 2025-01-30T18:17:24.810Z (over 1 year ago)
- Language: JavaScript
- Homepage: devsrv.vercel.app
- Size: 113 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# **devsrv**
A nodejs http(s) server for web development with some cool features.
## **Motivation**
How many days to test all standalone webservers npm module with all simple features i'm looking for, vs time to code it. I coded it.
## **Command Line Usage**
> You can use `devsrv` as a standalone webserver.
#### Install
```
$ npm install -g devsrv
```
#### Run
> Go into the directory you want to serve (having an index.html file), then just type
```
$ devsrv
config: use config file [...]
server: start listening on 192.168.1.36:8443
server: ready
```
#### Options
```
$ devsrv
Usage: devsrv [options]
Instant self signed certificate https web server for developer.
Options:
-V, --version output the version number
-d, --document-root DocumentRoot (default: "./")
-a, --access-log Enable access Log
-e, --explorer Directory listing (default: false)
-l, --listening-port Listening port (default: 8443)
-i, --interface Network interface filter (regular expression)
-o, --open-browser Open the browser (default: false)
-m, --monitor-changes Monitor file changes and reload webpage (default: false)
-c, --config-file Configuration file (default: "./devsrv.config.js")
-b, --build trigger build process (default: false)
--build-dst build dist directory (default: "./dist/1.0.0/")
--build-src build src directory (default: "./public")
-h, --help display help for command
```
#### Optional config file
> When starting, the process try to read `./.devsrv.js` in the current directory or in specified `--config-file` directory config option.
## **Programmatical usage (nodejs)**
> You can use `devsrv` programmatically.
#### Install
```
$ npm install devsrv
```
#### Minimal js code
```
const Server = require( 'devsrv' );
const serverInstance = new Server();
serverInstance.start();
```
#### With a config object
```
const Server = require( 'devsrv' );
const config = {
documentRoot: './',
listeningPort: 8443,
regexpInterface: /wi-fi|eth0/i,
browser: true,
//features:{
// see #Features
//}
};
const serverInstance = new Server( config );
serverInstance.start();
```
#### Features config
> You can specify theses options if the `config` object.
```
const config = {
documentRoot: './tests',
interfaceRegexp: /wi-fi|eth0/i,
openBrowser: true,
clientRedirects:[
{
urlSrc:'/',
redirectTo:'/tests/index.html'
}
],
urlRewrites: [
{
urlSrcRegexp:/^\/tests2/,
replaceWith:'/tests'
}
],
textReplacements: [
{
queryVar:'r',
queryVarRegexp:/^0\.[0-9]{3}$/,
replaceRegexp:/THREEJSVERSION/g,
defaultValue:'0.119',
pathRegexp:/\.(html|js)|(\/)$/
}
],
monitorOptions:{
enable:false,
directories:[ './' ],
fileRegexp:/\.(html|jsm?)$/,
excludeRegexp: /node_modules/
}
};
module.exports = config;
```
## **Use with npm**
> `npm install devsrv` then add start script in your `package.json`
```
"scripts": {
"start": "node node_modules/devsrv/bin/devsrv.js -d ."
},
```
then
```
$ npm start
config: use config file [...]
server: start listening on [...]
server: ready
```
## Build process
`devsrv -b` will trigger build process. You can add this in `devsrv.config.js`:
```
"buildOptions": {
"src":"./tests",
"dst":"./dist/v1.0.0/threejs.119",
"replaceRegexp":"THREEJSVERSION",
"defaultValue":"0.119",
"fileRegexp":"\\.(html|js)$"
}
```
* remove dst directory if already exists
* copy files from src directory into dst directory (recursive),
* find files match regexp `fileRegexp`, then replace string in file using `replaceRegexp` with value `defaultValue`
## Monitor changes
`devsrv -m` will monitor `documentRoot` recursively and we send an event to the browser
each time a file or directory has changed. The browser use a SSE client to receive the event.
Under the wood, `fs.watch` is used. In tests/index.html you will find the peace of
code to use to handle Server Side Event Events ("reload" event only).
```
monitorOptions:{
enable:false,
directories:[ './' ],
fileRegexp:/\.(html|jsm?)$/,
excludeRegexp: /node_modules/
}
```
## Debugging
> Set env var `DEBUG` with any value i.e `DEBUG=* devsrv`.
## **Changelog**
> **v1.0.0 - 02/18/2022**
* [x] Add: use HTTPS with generated self signed SSL certificates by default
* [x] Add: client redirects handler
* [x] Add: url rewriting handler (proxy)
* [x] Add: static content webserver with content rewriting
* [x] Add: open web browser option
> **v1.1.0 - 02/18/2022**
* [x] Add: static webserver with content rewriting using query string variable
> **v1.3.0 - 02/18/2022**
* [x] Add: detect Codesandbox, then use http rather than https, because of Codesandbox reverse proxy ssl termination
> **v1.3.1 - 02/21/2022**
* [x] Change: code refactor
* [x] Change: change config file name
* [x] Add: explorer (directory listing)
* [x] Add: npm build script (releases static files, serverless provider compliant i.e vercel )
> **v1.4.0 - 02/23/2022**
* [x] Add: monitor file changes and reload web page, no websocket but Server Side Events (SSE)
* [x] Add: simple access log
> **v1.4.1 - 02/23/2022**
* [x] Fix: check config before start monitoring file changes
* [x] Add: simple access log
> **v1.4.2 - 02/24/2022**
* [x] Fix: use session to store query var value
> **v1.5.0 - 03/01/2022**
* [x] Add: monitor options, see #1
* [x] Add: js config file, see #2
> **v1.5.1 - 03/02/2022**
* [x] Fix package version pb
> **v1.5.1 - 03/02/2022**
* [x] More delay for file changes
## **Roadmap**
* [ ] CI tests
* [ ] Network level throttling (simulate slow network for testing) ?
* [ ] Systemd template ?
* [ ] Websocket proxy ?
* [ ] WebRTC ?