Compare commits

..

No commits in common. "master" and "1.6.0" have entirely different histories.

5 changed files with 21 additions and 79 deletions

View File

@ -22,8 +22,6 @@
> 在项目根目录中放置 `.httpserver`文件, 并配置好之后, 重启或重新加载窗口, 以启动服务。 > 在项目根目录中放置 `.httpserver`文件, 并配置好之后, 重启或重新加载窗口, 以启动服务。
## 插件通用配置
> 通用配置可以设置`domain`,`key`,`cert`3个字段, 可省的每个项目配置一次。通用配置优先级低于项目的配置。
## .httpserver 文件 ## .httpserver 文件
> 使用`.httpserver`来配置web服务器信息, 该文件应为一个json格式的。 > 使用`.httpserver`来配置web服务器信息, 该文件应为一个json格式的。
@ -32,11 +30,6 @@
{ {
"enabled": true, // 这里配置为 true 才会启动web服务 "enabled": true, // 这里配置为 true 才会启动web服务
"port": 23333, // 【可选】 默认使用 23333 端口, 如果被使用了, 会向上查找可用端口 "port": 23333, // 【可选】 默认使用 23333 端口, 如果被使用了, 会向上查找可用端口
"https": true, // 【可选】 是否使用https
"http2": true, // 【可选】 是否使用http2, 等价于https, 用哪个都可以
"domain" "", // 【可选】有域名, 就会用域名打开页面, 没有就用IP
"key": "", // 【可选】域名证书的绝对路径(仅当开启https/2时需要)
"cert": "", // 【可选】域名证书的绝对路径(仅当开启https/2时需要)
"root": ".", // 【可选】 web服务的根目录, 默认为当前项目的根目录, 可填写相对项目根目录的路径。 "root": ".", // 【可选】 web服务的根目录, 默认为当前项目的根目录, 可填写相对项目根目录的路径。
"headers": { // 【可选】支持注入一些头信息, 方便特殊需要的调试 "headers": { // 【可选】支持注入一些头信息, 方便特殊需要的调试
"cache-control": "no-store" // 默认为 no-store "cache-control": "no-store" // 默认为 no-store

View File

@ -8,7 +8,6 @@ const vsc = require('vscode')
const { join, basename } = require('path') const { join, basename } = require('path')
const { parse } = require('url') const { parse } = require('url')
const http = require('http') const http = require('http')
const http2 = require('http2')
const fs = require('iofs') const fs = require('iofs')
const { WebSocketServer } = require('ws') const { WebSocketServer } = require('ws')
@ -43,7 +42,6 @@ const MIME_TYPES = {
other: 'application/octet-stream' other: 'application/octet-stream'
} }
const SERVER_OPTIONS = { allowHTTP1: true }
const COMMON_HEADERS = { const COMMON_HEADERS = {
'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': '*', 'Access-Control-Allow-Headers': '*',
@ -63,8 +61,6 @@ let port = 23333
let baseUrl = 'http://127.0.0.1:' + port let baseUrl = 'http://127.0.0.1:' + port
let server let server
let ws = null let ws = null
let domain
let isHttps = false
const HMR_SCRIPT = ` const HMR_SCRIPT = `
<script> <script>
@ -122,12 +118,8 @@ function createServer() {
} }
console.log(`尝试使用${port}端口...`) console.log(`尝试使用${port}端口...`)
server = (isHttps ? http2.createSecureServer : http.createServer)( server = http
isHttps ? SERVER_OPTIONS : void 0 .createServer(function (req, res) {
)
server
.on('request', function (req, res) {
let pathname = parse(req.url).pathname.slice(1) let pathname = parse(req.url).pathname.slice(1)
let paths = pathname.split('/') let paths = pathname.split('/')
@ -161,7 +153,7 @@ function createServer() {
res.setHeader('content-length', stat.size) res.setHeader('content-length', stat.size)
} }
res.writeHead(200, isHttps ? void 0 : 'OK') res.writeHead(200, 'OK')
if (ext === 'html') { if (ext === 'html') {
res.end(code) res.end(code)
@ -180,7 +172,7 @@ function createServer() {
res.setHeader('accept-ranges', 'bytes') res.setHeader('accept-ranges', 'bytes')
res.setHeader('content-type', MIME_TYPES.html) res.setHeader('content-type', MIME_TYPES.html)
res.setHeader('content-length', Buffer.byteLength(code)) res.setHeader('content-length', Buffer.byteLength(code))
res.writeHead(200, isHttps ? void 0 : 'OK') res.writeHead(200, 'OK')
res.end(code) res.end(code)
return return
@ -196,7 +188,7 @@ function createServer() {
res.setHeader('accept-ranges', 'bytes') res.setHeader('accept-ranges', 'bytes')
res.setHeader('content-type', MIME_TYPES.html) res.setHeader('content-type', MIME_TYPES.html)
res.setHeader('content-length', Buffer.byteLength(code)) res.setHeader('content-length', Buffer.byteLength(code))
res.writeHead(200, isHttps ? void 0 : 'OK') res.writeHead(200, 'OK')
res.end(code) res.end(code)
return return
@ -204,31 +196,27 @@ function createServer() {
} }
res.setHeader('content-length', 0) res.setHeader('content-length', 0)
res.setHeader('x-url', file) res.setHeader('x-url', file)
res.writeHead(404, isHttps ? void 0 : 'Not Found') res.writeHead(404, 'Not Found')
res.end(null) res.end(null)
} }
}) })
.listen(port)
.on('error', err => { .on('error', err => {
console.log(`${port}端口被占用~~~`) console.log(`${port}端口被占用~~~`)
port++ port++
createServer() createServer()
}) })
.on('listening', _ => {
baseUrl = `http${isHttps ? 's' : ''}://${domain || '127.0.0.1'}:${port}`
ws = new WebSocket(server)
statItem.text = `http.server (🟢)`
statItem.show()
})
.listen(port)
return server server.on('listening', _ => {
baseUrl = 'http://127.0.0.1:' + port
ws = new WebSocket(server)
statItem.text = `http.server (🟢)`
statItem.show()
})
} }
function __init__() { function __init__() {
let folders = vsc.workspace.workspaceFolders let folders = vsc.workspace.workspaceFolders
let commonConfig = vsc.workspace.getConfiguration('HttpServer')
enabled = false
statItem.hide() statItem.hide()
@ -251,7 +239,6 @@ function __init__() {
if (conf.root) { if (conf.root) {
root = join(root, conf.root) root = join(root, conf.root)
} }
isHttps = conf.https || conf.http2
if (conf.headers) { if (conf.headers) {
for (let k in conf.headers) { for (let k in conf.headers) {
@ -263,20 +250,6 @@ function __init__() {
} }
} }
if (isHttps) {
let key = conf.key || commonConfig.key
let cert = conf.cert || commonConfig.cert
if (key) {
SERVER_OPTIONS.key = fs.cat(key)
}
if (cert) {
SERVER_OPTIONS.cert = fs.cat(cert)
}
}
domain = conf.domain || commonConfig.domain
if (conf.enabled) { if (conf.enabled) {
enabled = true enabled = true
port = conf.port || 23333 port = conf.port || 23333
@ -295,15 +268,13 @@ export function deactivate() {}
export function activate(ctx) { export function activate(ctx) {
__init__() __init__()
vsc.workspace.onDidChangeConfiguration(__init__)
vsc.workspace.onDidSaveTextDocument(doc => { vsc.workspace.onDidSaveTextDocument(doc => {
let file = doc.fileName if (enabled) {
if (file?.startsWith(root)) { let file = doc.fileName
if (basename(file) === CONFIG_FILE) { if (file.startsWith(root)) {
return __init__() if (basename(file) === CONFIG_FILE) {
} return __init__()
if (enabled) { }
ws.send() ws.send()
} }
} }

View File

@ -2,7 +2,7 @@
"name": "simple-http", "name": "simple-http",
"displayName": "simple http.server", "displayName": "simple http.server",
"description": "🔥 简单的http服务器, 方便临时调试html", "description": "🔥 简单的http服务器, 方便临时调试html",
"version": "1.7.0", "version": "1.6.0",
"publisher": "yutent", "publisher": "yutent",
"author": "Yutent [@yutent]", "author": "Yutent [@yutent]",
"icon": "logo.png", "icon": "logo.png",
@ -31,27 +31,6 @@
"title": "在浏览器中打开" "title": "在浏览器中打开"
} }
] ]
},
"configuration": {
"type": "object",
"title": "HttpServer 通用配置",
"properties": {
"HttpServer.domain": {
"type": "string",
"default": "",
"description": "默认域名(需要手动绑hosts或DNS解析)"
},
"HttpServer.key": {
"type": "string",
"default": "",
"description": "域名的证书的绝对路径"
},
"HttpServer.cert": {
"type": "string",
"default": "",
"description": "域名的证书的绝对路径"
}
}
} }
}, },
"repository": { "repository": {

View File

@ -1,5 +1,4 @@
{ {
"enabled": true, "enabled": true,
"https": false,
"port": 9090 "port": 9090
} }

View File

@ -11,6 +11,6 @@
</head> </head>
<body> <body>
sdsdsdsdsssdsdsd sdsdsdsdsssdsdsd
ssssdddfdfd dsdsd
</body> </body>
</html> </html>