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

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

节点已经这样做了

“这个”我的意思是创build机器可执行的二进制代码。 它尽pipe使用JIT模式 。 更多的是,当我覆盖别人谷歌search这可能是search…

OS本地二进制可执行文件…如果使用二进制文件而不是源文件,则表示是本地操作系统可执行文件,是的。 NW.JS和Electron都做得很好。

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

节点使用二进制文件“Just In Time”

开箱即用,Node自行编译脚本,并创buildcaching的V8机器代码(认为是“可执行的” – 它使用CPU节点本地的真机代码运行),然后执行它处理的每个事件。

这里有一个Google的参考资料,解释了V8引擎实际上编译成真正的机器代码,而不是虚拟机。

Google V8 JavaScript引擎devise

当您的应用程序第一次加载时,这个编译发生。

只要您调用“require('module')”指令,它就会将这些代码caching为“模块”。

它不会等待您的整个应用程序进行处理,而是在遇到每个“require”时预编译每个模块。

require中的所有东西都被编译并引入到内存中,包括variables和活动状态。 再次, 与许多stream行的博客文章相反 ,这是作为单独的机器代码进程执行的。 没有虚拟机,没有任何解释。 JavaScript源本质上是编译成内存中的可执行文件。

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

您可以随时强制重新编译任何模块 。 不太清楚的是,您实际上已经可以很轻松地重新编译这些对象,从而使您能够“重新加载”应用程序的各个部分,而无需重新加载整个事物。

一个很好的用例就是创build自修改代码,例如,从文件夹加载策略的策略模式,例如,一旦添加了新文件夹,您自己的代码就可以将文件夹重新编译为内联代码,创build一个“strategyRouter.js”文件,然后使您的路由器的Nodecaching失效,这会强制Node只重新编译该模块,然后在未来的客户端请求中使用该模块。

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

注意:在人们告诉我自修改代码与eval一样坏或者比eval差,对于debugging很糟糕并且不可能维护的时候,请注意Node本身就是这样,许多stream行的Node框架也是如此。 我不是在解释原创性的研究,我正在解释Google的V8引擎(也就是Node)的devise能力,因为这个问题要求我们去做。 请不要拍FM的人,否则人们会停止R'ing并保持自己。

“Unix并不是为了阻止用户做愚蠢的事情,因为这样做也会阻止他们做出聪明的事情。” – Doug Gwyn

Angular 2,Meteor,新的基于Node的Light table IDE以及其他一些框架都朝着这个方向发展,以便进一步从代码中移除开发人员,并使他们更接近应用程序。

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

这实际上很简单…这里是一个热重新加载npm,替代品只是谷歌“节点需要热重新加载”

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

如果我想build立我自己的框架并以一种令人惊叹的新方式重新加载呢?

就像Node中的许多事情一样,它也非常容易。 节点就像服务器的jQuery! ; d

stackoverflow – 无效的节点的要求caching