◆ エクスプローラのアドレスバーに serve って打つだけでそのフォルダを localhost でアクセスできるようにする

最近の JavaScript は file:/// だと使えない機能が多いです
module は完全に使えません

なのでサーバ上においてアクセスできるようにしたいです
ただ 常に起動してるサーバがあるとは限りません

あったとしても公開したいフォルダがサーバの公開領域の内側にあることは稀です
わざわざサーバの公開領域に移動やコピーも毎回となると面倒です
それに公開してるサーバのフォルダに移動やコピーではパスも自由ではなくなります
長いパスだったり特定パスでアクセスしたい場合に使えません

なので できれば目的のフォルダに対してウェブサーバを起動したいです
よくやるのはそのパスをコマンドプロンプトで開いて php や py コマンドで簡易サーバを起動してます

php -S localhost:8080

py -m http.server 8080

Node.js は簡易サーバ機能はないのでそういうパッケージをインストール必要です
自分で作るならだいたいこんなの

const http = require("http")
const path = require("path")
const fs = require("fs")

http.createServer((req, res) => {
const serveFile = async filepath => {
const stat = await fs.promises.stat(filepath)
if (stat.isFile()) {
return new Promise((ok, ng) => {
fs.createReadStream(filepath)
.pipe(res)
.on("finish", ok)
.on("error", ng)
})
} else if (stat.isDirectory()) {
return serveFile(path.join(filepath, "index.html"))
} else {
throw new Error("Invalid type")
}
}
const pathname = new URL(req.url, "http://localhost/").pathname
serveFile(path.join(process.cwd(), pathname)).catch(err => {
res.statusCode = 404
res.end("File not found")
})
}).listen(~~process.argv[2] || 8000)

node serve.js 8080

Content-Type を送信しないので JavaScript が実行されないかも

ただ これらの方法でも コマンドプロンプトを開いてコマンドを打つというのですら何度もやると面倒になってきます
そこで これをもっと楽にする方法を考えます

右クリックメニュー

一番直感的です
フォルダを右クリックしたら 「このフォルダをサーブ」 というのがあるといいですよね

ここのカスタマイズはレジストリが入ってきて面倒なので前に書いた記事に任せます

エクスプローラ機能を使う

今回のメインはこっちです

ちょっとしたショートカットですが エクスプローラのアドレスバーにコマンドを打つと実行されます
そのとき表示中のフォルダがカレントディレクトリになって実行されるので cmd と打ってコマンドプロンプトを出してから php とか py とか打つこともできます

ですが もうちょっと改良して

@echo off

set /P PORT="port:" || set PORT=8000
php -S localhost:%PORT%

という bat ファイルを serve.bat という名前でパスの通ってるフォルダに置いておきます
php のところは自分の環境に合わせて変えます

そしてエクスプローラのアドレスバーで serve と入力するとコマンドプロンプトが起動して

port:

とプロンプトが出ます
ここに 8080 とか好きなポートを打てばそのポートでサーバが起動します
ポート番号はデフォルトで良ければ何も打たず Enter すれば 8000 で起動します

アドレスバーではコマンドを打てますが 引数は打てないようです
スペースが入ると bing で検索されます

まとめると

このフォルダを localhost でアクセスできるようにしたいというときに エクスプローラは開いてるはずなので
「serve とアドレスバーに打つ」 だけでサーバを起動できます
止めるのは開くコマンドプロンプトのウィンドウを閉じるだけ