Skip to main content

PM2解释器

PM2 中使用解释器

生产

如果您想共享、捆绑、打包或部署您的代码库,通常最好使用普通的旧 Javascript (VanillaJS)。这意味着您将拥有代码的预处理版本,然后您将执行 Javascript 入口点。

例如,通常的目录结构如下所示:

├── src
├── dist
└── package.json

其中src包含 es6coffescript 或其他任何内容,并且dist是转译的 Javascript。这现在很容易用 PM2 设置,因为它会在没有任何配置的情况下启动 Javascript

但是,在编写代码时,可能会使配置变得更加困难。说你想查看并重新开始。您将不得不查看、转译并重新启动。PM2 既不是构建系统也不是任务运行器,因此我们建议您选择第二种方式。

开发

即使我们不推荐它,这在生产工作流程中可能也能正常工作。捆绑代码更安全,这会使脚本启动过程变慢,并且可能无法使用集群模式。

解释器

将转译器与 PM2 一起使用的最简单方法是覆盖执行解释器 ( exec_interpreter)。请注意,如果更改此设置,您的代码将仅适用于fork_mode检查这里 fork 模式之间的差异)。

为此,请--interpreter通过 CLI 或exec_interpreter通过 json 配置指定选项。

Coffee-script

$ npm install -g coffee-script
$ pm2 start --interpreter coffee index.coffee

只需添加--watch一个守护程序咖啡脚本,该脚本将在文件更改时重新启动。

Babel

$ npm install -g babel-cli
$ pm2 start --interpreter babel-node index.es6
tip

请记住,这些命令仅适用于fork_mode。如果你想运行一个 PM2 集群,请参考下面的替代方案。

Require hook

这是我最喜欢的选择。通过在代码中注册转译器,它将作为标准 Javascript 运行。其中大多数实际上会更改节点内部的require,或调整 ,module以便在解释所需的脚本之前对其进行转译(例如babelcoffee)。

与实际解决方案相比,这种解决方法更像是一种黑客攻击。请记住,它会减慢脚本启动速度。

要使其工作,请在纯 Javascript 中准备一个入口点,该入口点将在包含非转译源之前调用 require 钩子。

Coffee-script

// server.js
require('coffee/register');
require('./server.coffee');

Babel

require('babel-register');
require('./server.es6');

查看babeljs 文档以获取更多选项。

然后,您所要做的就是启动脚本pm2 start server.js。由于这将使用node解释器,因此集群模式将按预期工作。