【问题标题】:Is it possible to compile a JS app + the NodeJS interpreter into a single executable?是否可以将 JS 应用程序 + NodeJS 解释器编译成单个可执行文件?
【发布时间】:2011-04-04 11:45:32
【问题描述】:

是否可以将 JS 应用程序和 NodeJS 解释器编译成单个可执行文件以进行分发?

【问题讨论】:

  • 如果您想使用 JS、HTML 和 CSS 开发可执行文件,请查看:appcelerator.com
  • 感谢@BGerrissen,但它实际上是一个已经在运行的服务器端 node.js 应用程序,我想“安全地”分发到客户端的服务器。
  • 不要认为 nodejs 工具有那么远,唉。一直在环顾四周,看到很多手动配置。所有这些都涉及安装 nodejs,然后使用 git 或其他方式部署代码。

标签: javascript compilation distribution node.js


【解决方案1】:

你需要一个带有 git 和 python 的 linux 盒子,然后是丑陋的解决方案:

$ git clone git://github.com/ry/node.git
$ cd node
$ vim src/node.js    # add your code to end before "process.loop();"
$ ./configure
$ make
$ sudo make install
$ node

【讨论】:

  • 确实很丑。我认为您最好覆盖src/node.js 中的if (process.argv[1]) {...module.runMain() 部分,并将您的代码作为根模块加载,而不是逐字插入。不过我还没有测试过。
  • 这个想法是引导digitala阅读nodejs源代码:)
  • @Lauri,这会将 JS 编译为字节码还是将代码作为字符串存储在内存中以在运行时执行?
【解决方案2】:

是否可以将 JS 应用程序和 NodeJS 解释器编译成单个可执行文件以进行分发?

这听起来很明显,但这是我的看法。

“用于分发的单一可执行文件”听起来很像安装程序...

安装程序将包含或能够在线获取您的 js 脚本和已编译的 node.js。它会解压所有内容并在 /etc/init.d/ 中创建一个脚本来启动和停止服务器。

如果您的所有客户端都在同一个发行版上(例如 Debian),我只需为适当的打包工具(例如 apt)制作一个包,然后让包工具处理所有事情。

如果客户端都有不同的发行版,你可以查看autopackage

【讨论】:

    【解决方案3】:

    如果您的目标是执行 javascript,您可以创建一个简单的 C 或 C++ 包装程序,该程序将生成解释器并评估您的 JS。如果需要单个文件,可以将 js 源作为字符串常量包含在内。

    当您编译包装程序时,您希望将statically link 指向节点及其依赖关系树的其余部分。静态链接不依赖于系统上的共享库,而是将项目依赖的例程复制到编译后的二进制文件中。

    如何做到这一点取决于你的环境

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-08
      • 2018-10-13
      相关资源
      最近更新 更多