You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用NW.js的JS保护功能将OSX应用的JS文件夹编译为原生二进制?

用NW.js保护OSX应用的JavaScript代码:完整指南

我来帮你一步步搞定NW.js在OSX上的JS代码保护,结合你提到的js/文件夹场景,分两部分说明编译和集成的具体操作:

第一部分:编译JavaScript文件为原生二进制

首先得确认你用的是NW.js SDK版本——普通发行版没有代码编译工具nwjc,这是关键前提。

单个文件编译

打开终端,导航到你的项目根目录,直接用nwjc命令编译单个JS文件:

# 语法:nwjc [输入JS路径] [输出二进制文件路径]
nwjc ./js/main.js ./main.bin

这个命令会把js/main.js编译成原生二进制文件main.bin,别人无法直接读取源码。

批量编译整个js/文件夹

如果js/里有多个业务文件,写个简单的bash脚本批量处理更高效:

#!/bin/bash
# 遍历js/下所有.js文件,编译为同名.bin文件
for file in ./js/*.js; do
  if [ -f "$file" ]; then
    nwjc "$file" "${file%.js}.bin"
    echo "已编译:$file → ${file%.js}.bin"
  fi
done

保存为compile.sh,给它加执行权限chmod +x compile.sh,运行后就能批量生成所有二进制文件。

第二部分:修改应用配置,让NW.js加载二进制文件

原来的启动方式是直接指向Web根目录,现在需要调整入口逻辑,加载编译后的二进制:

方式1:用加载脚本作为入口

创建一个loader.js(这个文件不需要编译,作为NW.js的主入口):

// 初始化窗口,和你原来的窗口配置保持一致
nw.Window.open('index.html', {
  width: 800,
  height: 600,
  // 其他窗口参数...
}, function(mainWindow) {
  // 窗口加载完成后,执行编译好的二进制文件
  mainWindow.evalNWBin(null, './main.bin');
  
  // 如果有其他二进制模块,比如utils.bin,也可以在这里加载
  // mainWindow.evalNWBin(null, './js/utils.bin');
});

然后修改package.json里的main字段,从原来的index.html改成loader.js:

{
  "main": "loader.js",
  "name": "your-app-name",
  // 其他配置...
}

方式2:在HTML中直接加载

如果不想改主入口,也可以在index.html的脚本里加载二进制:

<!DOCTYPE html>
<html>
<head>
  <!-- 原来的头信息 -->
</head>
<body>
  <!-- 原来的页面内容 -->
  <script>
    // 获取当前窗口实例,加载二进制文件
    const currentWindow = nw.Window.get();
    currentWindow.evalNWBin(null, './main.bin');
  </script>
</body>
</html>

最后一步:打包测试

把所有编译好的.bin文件、loader.js(如果用方式1)、index.html和静态资源(CSS、图片等)放到NW.js的应用目录,按照正常的NW.js打包流程打包OSX应用即可。

关键注意事项

  • 版本绑定:编译后的二进制文件和NW.js版本强关联,后续升级NW.js必须重新编译所有JS文件。
  • 测试顺序:先确保未编译的代码能正常运行,再编译测试,避免排查问题时混淆。
  • 无需编译NW.js API代码:只编译你的业务逻辑代码,NW.js自身的API调用不需要处理。

内容的提问来源于stack exchange,提问作者ffConundrums

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:35:15