Giter Club home page Giter Club logo

sys-shim's Introduction


简单的使用前端语言即可快速开发桌面程序,程序体积小于 1M。

为什么

想开发一个简单的桌面程序,只使用前端语言开发,暂只考虑在 windows 上运行,希望开发体验像在浏览器中一样,然后程序的样子像是本地应用一样,调用本地文件、系统命令、后台运行、托盘菜单这些都没有问题。

调研了一些常见的方案,发现他们都不适合,所以就开发了此项目 。

如何使用

方式一:直接开发

这个方式适用于体验,无需任何开发环境。

  • 第一步:下载 main 文件打开;
  • 第二步:当前目录生成了名为 page.html 的文件,你可以在这个文件里写界面或调用系统 API 。

方式二:单独引用

  • 安装: npm i sys-shim
  • 导入:
    • esm 方式 import Sys from 'sys-shim'
    • cjs 方式 const Sys = require('sys-shim')
    • umd 方式 <script src="./node_modules/sys-shim/browser/main.umd.min.js"></script>
  • 使用:
new Sys('ws://127.0.0.1:10005?token=tokentokentoken').then(main => {
  main.native.win.msgbox(`hello`, `title`)
})

方式三:使用脚手架模板开发

贡献

如果你想参与这个项目的开发。

node v18.19.0

rem 安装依赖
pnpm i

rem 生成库文件 sys.js
pnpm gen.res

rem 获取 main.exe, 可以通过编译或下载得到
pnpm main:build

rem 启动项目
pnpm dev

rem 发布 npm
pnpm gen.npm.push

sys-shim's People

Contributors

windyeasy avatar wll8 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

sys-shim's Issues

Win10 异常

环境

版本 Windows 10 专业版
版本号 21H2
安装日期 ‎2022/‎7/‎5
操作系统内部版本 19044.3086
体验 Windows Feature Experience Pack 1000.19041.1000.0

操作流程

下载 release 中的 page.html 和 main.exe

运行 main.exe,自动安装了 webview2,然后窗口消失,再次运行,只存在于后台,看不见任何表现

下载 win12.exe,运行,无任何表现

下载 win11.exe,运行,无任何表现

删除 main.exe 及 page.html,运行 win12,win11 依旧无任何表现

重新下载 main.exe,无任何表现,也没有自动创建 page.html

fix: 直接使用字面量时,不应运行错误

一个注释字符串的多行字符,可以赋值给变量,但却不能直接使用。

import console; 
import process.popen

var str = /*
  cd /d C:\
  dir
*/

var res = process.popen.cmd(/*
  cd /d C:\
  dir
*/).readAll()

console.log(res)
console.pause(true);

运行以上代码报错:

{Calling}:'trim'
{Bad argument}:@1
'
{Expected}:string
{Got}:null'

fix: ws.call 传参体积优化

在 web 页面中(在 nodejs 中正常),传送过大参数会 main.exe 控制台抛出以下异常:

RAW CALLBACK ERROR:

{Attempt to}:concatenate
{Type}:buffe

开发环境下报错:

RAW CALLBACK ERROR:
文件:...5.69.2\aardio_v35.69.2\lib\win\ui\_.aardio
错误行号:#280
不支持此操作:concatenate
类型:buffer
---------------------------------------------------
调用栈:
        [kernel]: in function 'error'
        ...69.2\lib\win\ui\ctrl\metaProperty\_.aardio:303: in function 'wndproc__'
        ...5.69.2\aardio_v35.69.2\lib\win\ui\_.aardio:280: in function <...5.69.2\aardio_v35.69.2\lib\win\ui\_.aardio:278>
        [kernel]: in function 'messageTranslateDispatch'
        ..._v35.69.2\aardio_v35.69.2\lib\win\_.aardio:557: in function 'parseMessage'
        ..._v35.69.2\aardio_v35.69.2\lib\win\_.aardio:593: in function 'loopMessage'
        [string "import win.ui;..."]:69: in main chunk

以下是重现代码:

const arg = `x`.repeat(9e5)
const res = await ws.call(
  `run`,
  [
    `
    console.log(1)
    return ...
    `,
    arg
  ],
)
console.log(111, res)

运行以下代码,在 nodejs 中发送消息正常,然后切换到 webview 中连接上相同的 wsUrl 发送相同的消息,如果消息超过 9e5 则报错:

import win.ui;

var winform = win.form(text="ws/JSON-RPC 服务端与Node.js交互的例子")
winform.add(
txtMessage={cls="edit"}
)

import web.socket.server;
var wsrv = web.socket.server();

import web.socket.jsonServer;
var rpcServer = web.socket.jsonServer(wsrv);

wsrv.onUpgradeToWebsocket = function(hSocket,request,response,protocol,origin){    
    return rpcServer.start(hSocket);
}

rpcServer.external = {
    run = function(code, ... ) {
        var arg = ...
	var res = null
        var err = false
        try {
            res = loadcode(code)(arg)
        }
        catch (e) {
            err = tostring(e);
        }
        return {
            err;
            res;
        }
    }
} 

wsrv.start("0.0.0.0", "9988");
wsUrl =  wsrv.getUrl()
import console
console.log(wsUrl)

import nodeJs;
nodeJs.startEnviron(
	wsUrl = wsUrl;
)
 
var js = /*** 
var startEnviron = require('startEnviron');
var WebSocket = require('rpc-websockets').Client;
var ws = new WebSocket(startEnviron.wsUrl)
ws.on('open', function() {
  ws.call('run', [`
  	import console
  	arg = ...
  	console.log("aar", #arg)
  	return arg
  `, 'x'.repeat(9e6)]).then(result=> {
  	console.log("node", result[1].length)
  })
})
***/

nodeJs.prequireByJs(winform.txtMessage,js);

var node = nodeJs.execLimit(js); 

node.logResponse(winform.txtMessage);
 
winform.show(); 
win.loopMessage();

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.