有没有办法预编译node.js脚本?

Mar*_*ark 11 binary precompile node.js

有没有办法预编译node.js脚本并分发二进制文件而不是源文件?

Nic*_*ele 14

Node已经这样做了.

"this"我的意思是创建机器可执行的二进制代码.它使用JIT模式执行此操作.更多关于我覆盖其他人谷歌搜索可能正在寻找...

操作系统原生二进制可执行文件... 如果用二进制文件而不是源代码,则表示本机操作系统可执行文件,是的. NW.JSElectron都做得非常出色.

在node.js脚本中使用二进制文件... 如果使用二进制文件而不是源代码,则意味着能够将部分脚本编译为二进制文件,因此难以或无法使用,或者您希望使用机器本机速度,是.它们被称为C/C++插件.您可以分发二进制文件(针对您的特定操作系统)并像调用任何其他var n = require("blah")一样调用它;

节点使用二进制文件"及时"

开箱即用,Node自己编译脚本并创建缓存的V8机器代码(想想"可执行" - 它使用运行的CPU节点本机的真实机器代码)然后它会处理它处理的每个事件.

这是一个谷歌参考,解释说V8引擎实际编译为真实的机器代码,而不是虚拟机.

Google V8 JavaScript引擎设计

首次加载应用程序时会进行此编译.

一旦调用"require('module')"指令,它就会将这些代码块缓存为"模块".

它不会等待您的整个应用程序被处理,而是在遇到每个"require"时预先编译每个模块.

require中的所有内容都被编译并引入内存,包括它的变量和活动状态.同样,与许多流行的博客文章相反,这是作为单独的机器代码过程执行的.没有VM,也没有任何解释.JavaScript源本质上被编译成内存中的可执行文件.

这就是为什么每个模块只能引用相同的需求而不会产生一堆开销; 它只是在内存中引用预编译和现有的对象,而不是"重新要求"整个模块.

您可以随时强制它重新编译任何模块.这是鲜为人知的,你实际上有重新编译这些对象很容易,让您的应用程序的"热重载"片段,而不会重新加载整个事情的控制.

一个伟大的用例是创建自修改代码,即加载策略从文件夹中,例如,一旦作为一个新的文件夹添加,你自己的代码重新编译的文件夹为A的输入策略模式线战略格局,创建一个"strategyRouter.js"文件,然后验证您的路由器,这迫使节点重新编译只有模块,然后在未来的客户端请求所使用的节点缓存.

最终结果:只要将新文件或文件夹放入应用程序,Node就可以热重新加载路由或策略.无需重新启动应用程序,无需分离无状态和有状态操作:只需将响应写为常规Node模块,并在更改时重新编译它们.

注:以前人们告诉我,自修改代码是坏还是有过之而无不及eval,可怕的调试,也不可能维持,请注意,节点本身并没有这一点,所以做很多流行的节点框架.我没有解释原创研究,我正在设计解释谷歌V8引擎(以及Node)的能力,因为这个问题要求我们这样做.请不要拍摄FM的人,否则人们会停止对它进行自我调整.

"Unix并不是为了阻止用户做蠢事,因为这也会阻止他们做出聪明的事情." - Doug Gwyn

角2,流星,新的基于节点开源轻表IDE和一堆其他框架的,以便从代码以进一步除去的显影剂和使他们更接近应用程序为首的在该方向上.

如何重新编译(热重载)所需的Node模块?

它实际上非常简单......这是一个热门重新加载的npm,对于替代品只是Google"节点需要热重载"

https://www.npmjs.com/package/hot-reload

如果我想以一种惊人的新方式构建自己的框架和热重载怎么办?

就像Node中的许多东西一样,这也非常简单.Node就像服务器的jQuery!; d

stackoverflow - 使Node的需要缓存无效

  • 操作系统原生的二进制可执行文件 - 这就是我要找的! (2认同)