【问题标题】:Is there a way to compile node.js source files? [duplicate]有没有办法编译 node.js 源文件? [复制]
【发布时间】:2011-09-02 23:39:29
【问题描述】:

有没有办法编译node.js 应用程序?

【问题讨论】:

标签: node.js compilation


【解决方案1】:

您可以使用Closure compiler 来编译您的javascript。

您也可以使用CoffeeScript 将您的coffeescript 编译为javascript。

你想通过编译实现什么?

编译任意非阻塞 JavaScript 的任务可以说,C 听起来非常艰巨。

编译成 C 或 ASM 并不能提高速度。如果您想通过子进程将计算速度卸载到 C 程序。

【讨论】:

  • OP 可能想要获取 node.js 应用程序并将其编译为本机代码。
  • 我想这是想要的关闭。或者更有可能是 jslint。
  • @drachenstern 恶魔。推荐jshint。 jslint 太自以为是了。
  • ~ 你会注意到我没有推荐它,我只是指出了 OP 可能要求的内容。大多数开发人员认为代码验证器就是编译器。他们想知道代码是有效的,而不是它运行时没有错误(这是一个潜在的额外副作用)。如果猫能记住语句结束位置的规则并决定使用大量分号(在较新的开发人员上越多越好)和更多 cmets,我会很高兴。
  • @raynos Closure 编译器是您推荐用于编译 node.js 代码以实现混淆目的的编译器吗?
【解决方案2】:

javascript 没有像 Java/C 这样的编译器(您可以将其更多地与 PHP 等语言进行比较)。如果你想编写编译代码,你应该阅读关于addons 的部分并学习 C。虽然这相当复杂,我认为你不需要这样做,而只需编写 javascript。

【讨论】:

  • 这不是 100% 有效的。有一些工具可以将 javascript 转换为字节码。还有一些工具可以将代码“编译”成闭包,这通常是a)更紧凑,b)遵循范围的概念,c)针对执行进行了优化(编译器开发人员通常是多重天才)所以......有编译器,只是与 VS 的 DevEnv.exe 不同。
  • @drachtenstern 字节码中的javascript可以被node.js使用吗?大多数情况下,编译器将源代码从一种语言编译成另一种语言,通常具有二进制形式(来自en.wikipedia.org/wiki/Compiler)。您正在谈论的那些工具仍然以优化的形式给您返回 javascript(只知道这些工具),但仍然是 javascript。我想知道你是否真的可以称它为编译器??
  • 是的,实际上我正在寻找插件的替代解决方案,不过谢谢
  • @Marco 欢迎您:P。希望你成功
【解决方案3】:

Node.js 运行在 V8 Javascript 引擎之上,该引擎本身通过将 javascript 代码编译为本机代码来优化性能......所以真的没有理由编译,是吗?

https://developers.google.com/v8/design#mach_code

【讨论】:

  • 通过编译您的 JavaScript 源代码,您将获得某种形式的二进制或字节码(例如)作为回报,如果您不想泄露您的源代码,这很好。这有意义吗?
  • @Mahdi 将某些东西变成二进制文件并不能阻止人们对其进行逆向工程。这并不难。
  • @SvenSlootweg 当然,但你最好聘请开发人员编写相同的代码,而不是聘请黑客将 cpu 指令集的色调逆向工程为合理的 javascript 源代码。
  • @Mahdi 对未经许可使用您的代码的人的保护主要是法律性质的,而不是技术性质的。在实践中,您不太可能从通过编译进行混淆获得任何收益——另一方面,它几乎肯定会给“合法”用户带来不便。换句话说:不要这样做。
  • 编译代码有比混淆更好的理由。如果你想分发你的程序,给某人一个二进制文件比告诉他们安装节点更容易。
【解决方案4】:

这里有一个答案:Secure distribution of NodeJS applications。 Raynos 说:V8 允许你预编译 JavaScript。

【讨论】:

    【解决方案5】:

    我可能很晚了,但您可以使用“nexe”模块将 nodejs + 您的脚本编译到一个可执行文件中:https://github.com/crcn/nexe

    EDIT 2021: Nexe 的最新版本是 2017 年发布的,看来开发速度已经放缓,因此这些天也应该考虑使用 Vercel 更广泛使用的替代品:pkg

    【讨论】:

    • 请注意:这仅适用于 Linux / Mac,不适用于 windows。
    • @Metal3d 这是一种非常新颖的方法;谢谢。
    • @Metal3d,哇!我希望它支持 Windows!
    • 它现在在 Windows 上受支持,但是它依赖于大多数 Windows 用户默认没有安装的 python。
    • 只有编译Windows机器需要Python和Visual Studio。客户端机器(那些运行“已编译的”Node.js 脚本的机器)没有这些依赖项。
    【解决方案6】:

    现在这可能包括超出您需要的内容(甚至可能不适用于非图形环境中的命令行应用程序,我不知道),但有nw.js。 它是 Blink(即 Chromium/Webkit)+ io.js(即 Node.js)。

    您可以使用node-webkit-builder 为 Linux、OS X 和 Windows 构建本机可执行二进制文件。

    如果您想要一个 GUI,这是一个巨大的优势。您可以使用 Web 技术构建一个。 如果不这样做,请在 package.json 中指定 "node-main"(可能还有 "window": {"show": false},尽管可能只使用 node-main 而不是 main

    我没有尝试以这种方式使用它,只是把它作为一种可能性扔出去。我可以说它肯定不是非图形 Node.js 应用程序的理想解决方案。

    【讨论】:

      【解决方案7】:

      EncloseJS.

      你得到一个没有源的功能齐全的二进制文件。

      Native modules also supported.(必须放在同一个文件夹)

      JavaScript 代码在编译时使用 V8 内部编译器转换为本机代码。因此,您的源代码不需要执行二进制文件,并且它们没有被打包。

      完美优化的本机代码只能在运行时基于客户端机器生成。如果没有这些信息,EncloseJS 只能生成“未优化”的代码。它的运行速度比 NodeJS 慢大约 2 倍。

      此外,node.js 运行时代码(与您的代码一起)被放入可执行文件中,以在运行时支持您的应用程序的节点 API。

      用例:

      • 制作您的应用程序的商业版本,无需源代码。
      • 制作您的应用的演示/评估/试用版,无需来源。
      • 制作某种自解压存档或安装程序。
      • 使用 node-thrust 制作一个闭源 GUI 应用程序。
      • 无需安装 node 和 npm 即可部署已编译的应用程序。
      • 无需通过 npm install 下载数百个文件即可部署您的应用程序。将其部署为单个独立文件。
      • 将您的资产放入可执行文件中,使其更加便携。 在不安装新节点版本的情况下测试您的应用。

      【讨论】:

      • 免费用于非商业用途。但真的很好耶
      • 它是封闭源代码。俄罗斯僵尸网络欢迎您的应用。
      • 这是一个好主意,但我运行了一些计算基准测试,不幸的是,Enclose 的代码比 Node 慢了大约 5 倍,所以这个恕我直言,除非性能有所提高。在 Win8.1 和节点 5(64 位 exe)上使用 -x 标志运行。
      • 如果您没有许可证(即 9 美元/月),您的程序将添加一条讨厌的输出消息,说要购买许可证!
      • 是的,它对非商业用途是免费的,但不受信任,我不理解“有限连接”这个词......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多