• 右键直接运行 app.js (node服务)


    前置条件电脑安装node环境
    执行 npm i nodemon -g

    1.新建一个bat 文件

    @echo off
    rem 获取bat本身文件名
    echo %0
    rem 获取外部第一个参数
    @REM echo %1
    nodemon  %1
    @REM Pause
    

    2.修改注册表

    cmd ->regedit
    新建项 .js
    HKEY_CLASSES_ROOT\SystemFileAssociations.js

    新建项 shell ->xxx(菜单名)->commadn

    bat的文件路径   后面加  "%1"
    C:\Users\Administrator\Desktop\99.bat "%1"
    


    后续可以学习https://www.cnblogs.com/xcblogs-python/archive/2020/08/29/13583154.html

    第二篇 - cmd打包成exe篇

    如何在启动服务的时候不显示cmd窗口呢,之前我有用VBScript写过一些脚本程序,这个呢可以不显示cmd窗口在后台执行,那我这次是要用这个么,当然不是,为什么呢

    VBScript写的脚本程序相信有些人有用过,就是后缀为.vbs的可执行文件,但是有些病毒正是利用这个特点写了一些病毒脚本,比如在U盘插进电脑的时候就触发运行,导致电脑中毒的情况,最经典的就是 U盘文件变成快捷方式 的病毒,想要了解的可以看我另外一个博文,这里就不赘述,运行这个后缀的程序是window自带的wscript.exe文件,所以我把它删除了。

    那么我要用什么呢,在这里我需要借助一个工具(cmd to exe converter),这个工具可以将bat文件打包成exe,并且可以设置该打包的文件隐身运行,那么这样就达到了我所需要的在后台运行的需求,下面看操作

    将之前的bat文件用cmd to exe converter 打开,如图进行相关设置,然后点击菜单栏的转换即可打包出exe文件

    然后将exe文件参照第一篇在 任务计划程序 中使用

    bat文件如果是ANSI格式的,引入到cmd to exe converter 中,中文可能乱码,因为cmd to exe converter 默认是UTF8编码

    cmd窗口默认不解析UTF8编码的中文,可以在bat文件中添加代码让cmd窗口解析UTF8编码

    chcp 65001

    img

    上面我们生成了exe文件,并且点击exe文件会在后台启动服务,但是我们多点击几下exe文件,在任务管理器中我们可以看到会同时启动好多这个文件,并不是只允许当前点击的这个文件,那么这并不是我们需要的,这个怎么解决呢

    看上面的代码,我们可以再建立一个bat文件,我将它命名为start.bat。

    里面先关掉之前的进程,再去调用,这样就保证了每次都只存在一个实例

    taskkill /f /t /im cgServer.exe
    start cgServer.exe
    

    在这一篇中,我们所讲的是将cmd打包成exe文件,解决了我希望启动的程序在后台运行的情况,但并没有将我的项目也打包成exe,这和标题有些不符合,那么接下来要怎么做呢,请看下一篇

    第三篇 - nodejs打包成exe

    我在思考,cmd可以打包成exe,那么用nodejs做的项目可以打包成exe吗,打包成exe后就可以将项目发给别人看,且不需要安装node环境

    首先想到的是 Electron ,它是目前使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序最常用的解决方案,但是要用它的话,就要遵循它的规范,说不定还要重构我的程序,且学习起来还是需要一些成本在里面的,基于这些情况,我把它抛弃了。

    那么还有什么解决方案呢,这时候一个pkg的node包映入了我的眼帘,它的作用就是 打包node为可执行文件(.exe)的工具 ,接下来我们直接用

    npm install -g pkg
    pkg server.js           
    pkg -t win server.js    
    
    • npm install -g pkg :全局安装pkg
    • pkg server.js : 将 api.js 编译成 api.exe 可执行文件
    • pkg -t win server.js : 上面的命令会同时编译出 linux 、windows 、mac 版的 exe,加 -t win 就可以只编译 windows 下的
    //server.js
    //用express做的简单服务
    
    const express = require("express");
    
    const app = express();
    
    const path = require("path");
    
    app.use(express.static(path.join(__dirname, "dist"))); //注意这里使用path.join(__dirname, 'dist')而不是'dist',虽然在命令行中执行起来效果是一样的,不过pkg打包会无法识别到dist目录
    
    var server = app.listen(8081, function () {
      var host = server.address().address;
    
      var port = server.address().port;
    
      console.log(`AIbuy agents server start successfully on http://${host}:${port}`);
    });
    
    

    编译完成后,会生成server.exe文件,双击该文件,浏览器访问http://localhost:8081即可

    注意在编译的过程中(pkg -t win server.js)可能会出现报错的情况,如下

    > pkg@4.3.0
    > Fetching base Node.js binaries to PKG_CACHE_PATH
      fetched-v12.18.1-win-x64     [                    ] 0%
    > Error! connect ETIMEDOUT 13.229.188.59:443
    > Asset not found by direct link:
      {"tag":"v2.6","name":"uploaded-v2.6-node-v12.18.1-win-x64"}
    

    这是因为编译的时候要从github下载uploaded-v2.6-node-v12.18.1-win-x64包,由于下载不了导致的,

    这时我们可以先去github下载到这个包,放到当前用户下,如C:\Users\cheng.pkg-cache\v2.6

    ,让包的名字改为 fetched-v12.18.1-win-x64 ,再次运行编译即可。

    要下载什么版本的包看自己的报错需要什么版本。

    github地址:https://github.com/vercel/pkg-fetch/releases

    正常下载网速很慢,推荐使用 IDM 进行下载

    注:pkg除了根据文件名打包,还可以根据package.json文件打包,要注意的是项目中引用文件的方式,pkg只会打包使用 require 或者 通过 __filename__dirname 的文件

    这一篇我们讲了将nodejs打包成exe,但是不知道你们有没有注意到,我们上面的操作都只是为了启动nodejs的服务,但是要访问的话,还是需要在浏览器中访问,那么如果代码中用了es6的语法,是不是还要带个谷歌浏览器让其他要访问你页面的人安装呢,这是一个值得思考的问题,我们继续看下一篇

    第四篇 - 加个浏览器的壳

    上面我们提到站点访问的问题,可能会说的比较极端,但是确实也是我当时在考虑的问题,那么这个要怎么解决呢。

    这次就不卖关子了,直接使用npm的easy-window包

    地址:https://gitee.com/zha2/easy-window

    可以直接下载,或者使用git克隆下来

    里面有一些案例感兴趣的可以看看

    我们所需要的是里面的 easy-window.exe 文件,将该文件拷贝到第二篇或者第三篇文件所在的目录中,比如我们用第二篇的目录为例,创建一个bat文件,内容如下

    start easy-window.exe -url http://localhost:3000/ -title "管理系统" -maxbox true -topmost true
    
    • -url :要用的url地址
    • -title :标题
    • -maxbox :允许窗口最大化
    • -topmost :将窗口置顶

    运行后就可以弹出一个的窗口,我们上面输入的地址内容就在这个窗口里面运行,这就像是给我们的项目加了一个壳,让我们项目在我们给定的壳里运行,这个壳是一个精简版的浏览器

    需要注意的是easy-window里面运行传统的网页没问题,但是运行单页应用就会出问题。

    easy-window各种参数

    img

  • 相关阅读:
    【Linux】PuTTY----------windows访问Linux 快捷方便
    接口测试、概念及常用方法小结
    设计模式
    事务
    Struts2技术详解
    message from server: "Host 'xxx' is not allowed to connect to this MySQL server的解决
    Java中多态性的实现
    应用上下文webApplicationContext
    ubuntu 12.04下访问windows共享文件夹
    排序问题分析
  • 原文地址:https://www.cnblogs.com/7c89/p/16035249.html
Copyright © 2020-2023  润新知