【问题标题】:How to run forever js with --experimental-modules flag如何使用 --experimental-modules 标志永久运行 js
【发布时间】:2019-11-03 07:17:36
【问题描述】:

我有一个使用 esm 模块和导入语句的应用程序。它在开发中使用带有 nodemon 的 --experimental-modules 标志运行良好,但是当我在生产中使用永久运行它时,导入失败,因为我不知道将标志放在哪里。当我使用下面的 package.json 运行 npm run build 时,它会显示 sh: --experimental-modules: command not found。 如果我将 --experimental-modules 添加到 forever-config.json 的“脚本”部分,它会说同样的话。

我已经在互联网上搜索了好几次。如何永远使用 --experimental-modules 标志?我正在运行 Node v10.16.0。

 {
    "type": "module",
    "name": "application_name",
    "version": "1.0.0",
    "private": true,
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "start": "concurrently \"npm run build:dev\" \"npm run start-server:dev\"",
        "build": "npm run build:prod && npm run start-server:prod",
        "build:dev": "webpack --config webpack-dev.config.js",
        "build:prod": "webpack -p --config webpack-prod.config.js",
        "start-server:dev": "NODE_ENV=development nodemon --config nodemon.json --experimental-modules src/server/index.mjs ",
        "start-server:prod": "NODE_ENV=production --experimental-modules forever -o ./forever-out.log -e ./forever-error.log start forever-config.json"
    },
//rest of package.json left out for brevity
}

forever-config.json

{
    "uid": "application_name",
    "max": 5,
    "spinSleepTime": 1000,
    "minUptime": 1000,
    "append": true,
    "watch": false,
    "script": "src/server/index.mjs"
}

【问题讨论】:

    标签: node.js server production-environment es6-modules forever


    【解决方案1】:

    我似乎能够使用传递此标志的command 属性使其工作,例如:

    {
      "uid": "myApp",
      "max": 100,
      "spinSleepTime": 30000,
      "append": true,
      "watch": false,
      "command": "node --experimental-modules",
      "script": "./scripts/some-script.mjs",
      "path": "D:/MyProject",
      "workingDir": "./",
      "sourceDir": "./",
      "logFile": "./forever-script-log.log",
      "outFile": "./forever-script-out.log",
      "errFile": "./forever-script-err.log",
      "args": ["--someOpt", "someVal"]
    }
    

    注意:您也可以使用args 将参数传递给您的脚本/应用程序。

    【讨论】:

    • 谢谢。这在某处有记录吗?我的解决方案是使用 require 而不是 import 但使用其余的 ES6 语法,直到标志不再需要为止。
    • 我认为它没有技术文档,购买他们确实提到您可以使用 command 指定要运行的确切进程,并且它默认为 node 所以我假设这个命令可以也接收参数¯\_(ツ)_/¯
    【解决方案2】:

    如果您无法访问 forever-config.json,您可以像这样运行命令:

    forever -c "node --experimental-modules" start app.js
    

    【讨论】:

      【解决方案3】:

      也可以在.bashrc等中设置NODE_OPTIONS环境变量:

      export NODE_OPTIONS="--experimental-modules"
      

      (使用NVM时似乎需要export

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-06
        • 2020-02-15
        • 1970-01-01
        • 1970-01-01
        • 2012-09-23
        • 2018-07-18
        • 1970-01-01
        相关资源
        最近更新 更多