1.生产方式

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

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

  1. ├── src
  2. ├── dist
  3. └── package.json

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

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

2.发展之路

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

2.1.执行解释器

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

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

2.1.1.Coffee-script

  1. #- npm install -g coffee-script
  2. #- pm2 start --interpreter coffee index.coffee

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

2.1.2.Babel

  1. #- npm install -g babel-cli
  2. #- pm2 start --interpreter babel-node index.es6

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

2.2.请求钩子

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

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

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

2.2.1.Coffee-script

  1. // server.js
  2. require('coffee/register');
  3. require('./server.coffee');

2.2.2.Babel

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

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

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