#24 可携式静态服务器

今天我们来用 JavaScript 做个简单的静态网页服务器吧!
疑?昨天不是说过了?
没错,但今天我们要把它做成「可执行档」!

故事是这样子的

不知道你们有没有遇过刚开始写网页的朋友(用记事本写的那种),说他写好了一个网页,想架个服务器跑跑看。
然後他刚好是那种电脑没有环境又三分钟热度的人。
感觉让他装个 Node.js、Python 或 Apache 之类的很麻烦,他以後也用不到。而且他又不想把 Source Code 放到网路上。

这时候,如果有个程序丢给他,让他点下去就可以架好他写的静态网页的话真是太好了!
所以,这个不用设定的 Click! Serve! 就出现了。

我们一样直接找 Koa 帮忙

因为这个需求真的是蛮简单的,只有静态档案,所以就直接请 Koa + Koa Static 出来吧!

const path = require("path");
const Koa = require("koa");
const app = new Koa();

app.use(async (ctx, next) => {
    console.log(`Process ${ctx.request.method} ${ctx.request.url} from ${ctx.request.ip}`);
    await next();
});

app.use(require("koa-static")("www"));

app.listen(80);

console.log("Server started at port 80");
console.log(`Serving static files from ${path.join(process.cwd(), "www")}`);
console.log("Visit http://localhost:80/ to see your website.");

我们希望当使用者点下程序後,它就会把身旁的 www 资料夹内的东西当作要 serve 的档案。
这样程序就写好了,超快的!

PKG

pkg 就是能将 Node.js 程序从专案资料夹变成可执行档的工具啦!
它其实就是把稍微修改过的 Node.js 核心跟你的程序包在一起,然後转成 bytecode。

我们先装好 pkg:

npm i -D pkg

然後在 package.json 中新增一个 script:

"scripts": {
    "build": "pkg index.js"
},

接着,让 npm 去跑上面的那个 script:

npm run build

然後就等 pkg 做事吧!

pkg 预设会产生 Linux、Windows 跟 MacOS 三个平台的可执行档。

执行

接着就可以简单写个 HTML JS CSS 然後把它们丢到 www 中跟刚刚产生的可执行档放到同个资料夹内:

接着点下去那个可执行档! 然後去 localhost

就完成了可携式静态服务器了。

接下来

接下来我们让它可以有些设定好了,因为我不想把每个资料夹都改叫 www 才能用。


每日铁人赛热门 Top 10 (1007)

以 10/07 20:00 ~ 10/08 20:00 文章观看数增加值排名

  1. +145 [面试][白板题]设计一个简易的抽奖程序
    • 作者: 宝宝出头天
    • 系列:全端工程师生存笔记
  2. +124 Day 23 - Keyboard Row
    • 作者: 毛毛
    • 系列:30天 Leetcode解题之路
  3. +120 如何在 Angular 建立 Breadcrumb (面包屑)
    • 作者: Mandy
    • 系列:Angular 常见问题大小事
  4. +119 [Python 爬虫这样学,一定是大拇指拉!] DAY23 - 实战演练:抓取股票代码清单 (2)
    • 作者: GreedIsGood
    • 系列:Python 爬虫这样学,一定是大拇指拉!
  5. +114 Day23 Let's ODOO: Currency
    • 作者: 盖瑞
    • 系列:Let's ODOO 开发与应用30天挑战
  6. +113 D28 - 用 Swift 和公开资讯,打造投资理财的 Apps { 三大法人成交比重实作.3 }
    • 作者: Marvin
    • 系列:使用 Swift 和公开资讯,打造投资理财的 Apps
  7. +111 Proxmox VE 客体机线上迁移
    • 作者: Jason Cheng (节省哥)
    • 系列:突破困境:企业开源虚拟化管理平台
  8. +111 Android学习笔记29
    • 作者: blossomgp3
    • 系列:Android kotlin &MVVM
  9. +110 Day 01 「科学 v.s. 数学」前言
    • 作者: Kuma
    • 系列:你就是都不写测试才会没时间:Kuma 的 30 天 Unit Test 手把手教学,从理论到实战 (Java 篇)
  10. +107 DAY24神经网路(续二)
    • 作者: agaryaagarya
    • 系列:数据分析方法研究和理解演算法

<<:  Day 23. 透过 Constraints 机制,实作出能够拉伸的响应式卡片设计

>>:  # Day 29 Page Migration (四)

[Day 12] 从 tensorflow.keras 开始的 MobileNet 生活

0. 进度条 模型 进度 VGG Net 完成 ResNet 完成 DensNet 完成 Mobil...

Day01: 为什麽我想要学 TypeScript

前端工程师说,我去交友网站找女朋友去了。 朋友问:找到了麽? 工程师说:找到了他们页面的一个 bu...

好记性的浏览器:localStorage

谈这个主题之前,我们先来回忆一下日常的场景,你来到桃子购物网站,选了你要的商品往下卷动网页,结果竟...

Day 12 Compose UI Dialog

今年的疫情蛮严重的,希望大家都过得安好,希望疫情快点过去,能回到一些线下技术聚会的时光~ 今天目标:...

Day8-TypeScript(TS)的介面型别(Interface)Part 1

今天要来介绍TypeScript(TS)的介面型别(Interface) 首先了解TS的核心原则之一...