有没有一种方法可以预编译Node.js脚本并分发二进制文件而不是源代码文件?
有没有一种方法可以预编译Node.js脚本并分发二进制文件而不是源代码文件?
Node已经实现了这个功能。
所谓的"这个功能"是指创建可执行机器二进制代码。它使用JIT模式来实现。关于这个,我会在讲解其他人可能搜索的内容之后再详细介绍...
本地操作系统二进制可执行文件... 如果你指的是本地操作系统可执行文件而不是源代码,那么是的。NW.JS和Electron都做得非常好。
在你的node.js脚本中使用二进制文件... 如果你指的是将脚本的一部分编译成二进制文件,使其难以或不可能被利用,或者你想要一些具有本地机器速度的东西,那么是的。 它们被称为C/C++插件。你可以分发一个二进制文件(针对你特定的操作系统),并像使用任何其他var n = require("blah");一样调用它。
Node使用"Just In Time"二进制文件
Node默认会自行预编译您的脚本,并创建缓存的V8机器码(类似于“可执行文件”——它使用实际的机器码,该机器码是本地CPU上运行的),然后在处理每个事件时执行。
这里有一个谷歌参考文献,解释了V8引擎实际上是编译成真正的机器码,而不是虚拟机。
Google V8 JavaScript Engine Design
这种编译发生在应用程序首次加载时。
只要调用“require('module')”指令,它就将这些代码片段作为“模块”缓存起来。
它不会等待整个应用程序被处理,而是在遇到每个“require”时预先编译每个模块。
所有require内部的内容都会被编译并引入内存,包括其变量和活动状态。再次强调,与许多流行的博客文章相反,这是作为单独的机器码进程执行的。没有虚拟机,也没有解释器。JavaScript源代码实际上是编译成内存中的可执行文件。
这就是为什么每个模块只需引用相同的require,而不会创建大量开销。它只是引用内存中预编译和现有的对象,而不是“重新要求”整个模块。https://www.npmjs.com/package/hot-reload
如果我想要构建自己的框架并以一种惊人的新方式进行热重载呢?
像许多Node中的事情一样,这也是非常容易的。Node就像服务器上的jQuery! ;D