是否可以将JavaScript编译/编码为二进制以隐藏代码?

是否可以将JavaScript编译/编码为二进制以隐藏代码?,javascript,node.js,Javascript,Node.js,我的NodeJS应用程序当然包含所有业务逻辑和算法,如果我在客户服务器上安装此应用程序,那么他们可以阅读我的源代码,我希望尽可能保密以保护我的业务 PHP有几个工具可以将PHP项目编码成字节码,这正是我希望能够为JS/NodeJS所做的 有几个NodeJS打包程序,它们只是将所有这些打包到一个可执行文件中,但是简单的JS源代码仍然存在 问题 当JS/NodeJS源/产品安装在客户服务器上时,如何保护它 PHP有几个工具可以将PHP项目编码成字节码 还有反编译器 对于这个特定的情况,一个小型化者将

我的NodeJS应用程序当然包含所有业务逻辑和算法,如果我在客户服务器上安装此应用程序,那么他们可以阅读我的源代码,我希望尽可能保密以保护我的业务

PHP有几个工具可以将PHP项目编码成字节码,这正是我希望能够为JS/NodeJS所做的

有几个NodeJS打包程序,它们只是将所有这些打包到一个可执行文件中,但是简单的JS源代码仍然存在

问题

当JS/NodeJS源/产品安装在客户服务器上时,如何保护它

PHP有几个工具可以将PHP项目编码成字节码

还有反编译器

对于这个特定的情况,一个小型化者将完成这项工作。这提供了一个可行的应用程序,在客户打算违反合同或许可证的情况下无法轻松修改。仅仅一个小型化器是不够的,因为在产品中,源映射对于正确的调试是必需的,而小型化的JS可以在源映射存在的情况下完全恢复为原始JS


还有一种方法使用V8功能将脚本编译为字节码并对其求值。相反,它不会使编译速度加快。

有一个库可以将nodej的纯文本javascript文件转换为二进制文件。它被称为bytenode

Bytenode允许您将Javascript文件编译成.JSC 然后可以使用require从javascript代码中调用它


一旦将bytenode模块加载到nodejs代码中,就可以使用“require”调用二进制文件

丑化是答案吗?(因为eit会使代码无法被人眼阅读,但它仍然不是二进制的)它总比没有好,但如果可能的话,我真的希望使用字节码。有web汇编(wasm),但它可以“反编译”回可读的形式(模糊代码也是如此)。实际上,如果你通过互联网将软件发送给任何请求它的客户端,你就不能指望有任何真正的安全性。保护知识产权的唯一真正方法是将其保存在您自己的安全服务器上。据我所知,
pkg
将应用程序编译为字节码,以防项目具有
private
标志。为什么
bytenode
会使代码变慢?因为v8不需要将js编译成字节码,所以它不应该更快吗?@LuketheGeek缓存允许在启动时进行一些改进,但脚本运行速度较慢。我所看到的开发人员的一些基准测试和声明都支持这一点,Node本身并不这样做这一事实也暗示了这一点。bytenode本身引入了较小的开销,可能会禁用一些通常在V8中完成的优化。如果为AOT编译对V8进行了微调,则可能会有所不同,但它是JIT。我对详细解释为什么在这种情况下V8字节码的执行速度较慢感兴趣。