针对 windows 32/64 位系统,构建一键运行的 nodejs 静态资源服务器

前言

因为工作性质,经常需要给客户发包,更新迭代我们正在做的项目的版本。

大部分时候,我们的项目主要是依赖浏览器环境运行的,偶尔可能要带上数据库,带上后台服务器。

但是问题就在于,我们主要做 2d、3d 数据可视化产品的。通俗点说,就是主要用到 canvas 2d 或者 canvas 3d webgl 来做我们的产品。

由于浏览器的安全限制或者技术本身的限制,代码运行的时候,有些资源只能跑在服务器里面才能正常拿到。

在实际应用的场景中,客户群有一个共同的特点,他们大多数并不是技术人员,而且大多数都用的是 windows 的系统。

因此,为了兼顾这大部分客户,所以有时候,即使我们做的是纯前端项目,也会为客户提供一个可以一键运行代码的全自动化系统。

当然“全自动化系统”说法夸张了一点,仅仅只是针对 windows 32/64 位系统做了适配,如果用 MacOS 或者 Linux,我相信拿到源码,自建个服务器,塞进去,也不是什么难事吧。

所以,这篇文章,我想要分享的内容就是,如何针对 windows 32/64 位系统,提供一个免安装版本的 nodejs 静态资源服务器。

我们搭建这个 nodejs 静态资源服务器主要用到的技术有 nodejs + express + dos批处理脚本等。

至于如果你说,我还要加上 mysql 或者 mongodb 服务器,不好意思,因为篇幅有限,这里我就不做介绍了,因为思路跟添加 nodejs 无二,自己稍微摸索一下,应该就能捣鼓出来了。

思路

整体思路其实很简单,我们这个系统的目录结构是这样的:

image.png

根目录中有一个 run.bat 文件,三个文件夹,分别是 32、64、resource。

  • run.bat —— 一键运行的入口
  • 32 —— 存放 32 位系统相关的免安装版本运行环境,比如 nodejs、mysql、mongodb 等等
  • 64 —— 存放 64 位系统相关的免安装版本运行环境,比如 nodejs、mysql、mongodb 等等
  • resource —— 存放源码、打包后代码

整个系统运行的思路为:

我们通过双击 run.bat 脚本,检测指定的端口是否可用,如果不可用就继续换端口检测。

检测到可用以后,根据当前系统版本,调用对应系统版本的运行环境,同时将端口号传进去。

start_node.bat 这个脚本,会用免安装版本的 nodejs 运行 resource 下面的 app.js,执行的同时,通过命令行传参的方式,将端口号传进去,这样就成功的开启了一个 nodejs 的静态资源服务器了。

实现

run.bat

首先我们来看看我们的 run.bat 里面的内容:

@echo off

REM 设置变量,默认设成64位,端口号设为 8081
SET _Bitness=64
SET port=8081

REM 检查端口占用情况
:checkPort
netstat  -ano | findstr %port% >nul

REM 获得上一句执行以后的 errorlevel
set n=%errorlevel%

REM 如果上一步获取到的 errorlevel 为 0 , 说明检测到了端口被占用了,
REM 就将端口号自增,同时跳到检测端口占用处重复检测;否则继续执行下去
if %n% == 0 (
	set /a port+=1
	GOTO checkPort
) else (
	GOTO startBat
)

REM 检测系统为 32 位还是 64 位
:startBat
IF "%PROCESSOR_ARCHITECTURE%" == "x86" (
  IF NOT DEFINED PROCESSOR_ARCHITEW6432s (
    SET _Bitness=32
  )
)

REM 调用对应的版本,并传入端口号
start %_Bitness%\start_node.bat %port%
@ping localhost -n 6 > nul

REM 开启页面
set "url=http://localhost:%port%/"
start %url%

如果不熟悉 Windows batch script 的语法,可以去 wikibooks 学习一下:https://en.wikibooks.org/wiki/Windows_Batch_Scripting#Syntax

start_node.bat

启动 nodejs 的批处理脚本内容很简单:

@echo off

set port=%1

64\node\node --harmony resource\app.js %port%

执行 app.js js 文件,并带上端口号。

app.js

我们的 app.js 里面的内容也很简单,拿到端口号,调用 express,创建一个静态资源服务器,只需要把我们的静态资源扔进 resource 下面的 public 文件夹就行了。

const express = require('express')
const path = require('path')
const app = express()

const argvs = process.argv;
const port = parseInt(argvs[argvs.length - 1]) || 8081;

app.use(express.static(path.join(__dirname, 'public')))

app.listen(port, () => {
	console.log(`App listening at port ${port}`)
})

nodejs 免安装版文件

直接在官网下一个免安装版本的 exe 后缀的执行文件,放到对应的文件夹就行了,地址为:https://nodejs.org/en/download/

image.png

后记

虽然看起来很简单,但是摸索的过程中,还是耗费了不少精力的。

特别是因为对于 batch script 的不熟悉,一度差点想要放弃了,其实耐心调试下,batch script 的语法还是很简单的。

而且平时,配合 Windows 的定时程序,用处无穷啊。

之前就有用过 batch script,定时启动一个 python 脚本,每天定时给电脑换壁纸。

虽然有人会说,折腾来折腾去,太麻烦了,为什么不下个 apache 服务器,直接把资源扔进去不就行了。

对此种反驳,我不置可否。

反正喜欢这样用的人,肯定会觉得这篇文章有所启发,这样也就达到我分享这篇文章的目的了。

在追求技术的路上,我们的是孤独的,越前进,越会发现身边与你同行的人好像越来越少了。

希望我们彼此都能珍重,为了梦想,坚持初心,不断的走下去,即使失败很多次,也要有一往无前的信念,下一次,说不定胜利的曙光就出现了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值