0

我在 Windows 10 环境中为 Atom 文本编辑器编写插件,以允许从 Atom 中通过量角器黄瓜运行测试,它使用 PlatformIO-Terminal 插件提供的服务。当我从 Atom 中激活该终端插件时,我希望能够从中执行任何旧程序,而我可以从它通过 pty 模拟的终端执行任何旧程序。

我在执行我通过 Atom 的 apm 之外的 npm 安装的任何节点程序时遇到问题。通过从该终端打印环境变量 NODE_PATH 进一步挖掘发现,Atom 已经吃掉了我的 NODE_PATH 值,没有附加它自己的值,而是完全消耗并替换了它。从该 pty 窗口中重置它不起作用,并且从 PlatformIO 配置终端中将其添加到“Shell 环境变量”中也不起作用。我已经安装了 3 个允许从操作系统中提取环境变量的插件,但都没有成功。

有没有办法解决这个问题?我可以直接访问可执行模块,但它们调用其他模块并依赖于 NODE_PATH。

4

1 回答 1

1

如果您没有成功使用终端包,您可以尝试process-palette. 它允许您精确定义命令的所有细节,包括环境变量。我制作了一个 Atom 命令,NODE_ENV在执行终端命令之前设置为任意字符串。截图如下:

流程调色板命令定义。

流程调色板环境变量。

下面是process-palette.json定义我编写的命令的文件。您需要做的就是安装软件包,使用以下代码创建该文件,然后选择Packages -> Process Palette -> Edit Configuration.

{
  "patterns": {
    "P1": {
      "expression": "(path):(line)"
    },
    "P2": {
      "expression": "(path)\\s+(line)",
      "path": "(?:\\/[\\w\\.\\-]+)+"
    }
  },
  "commands": [
    {
      "namespace": "process-palette",
      "action": "env",
      "command": "echo %NODE_PATH%",
      "arguments": [],
      "cwd": null,
      "inputDialogs": [],
      "env": {
        "NODE_PATH": "wargarble"
      },
      "keystroke": null,
      "stream": true,
      "outputTarget": "panel",
      "outputBufferSize": 80000,
      "maxCompleted": 3,
      "autoShowOutput": true,
      "autoHideOutput": false,
      "scrollLockEnabled": false,
      "singular": false,
      "promptToSave": true,
      "saveOption": "none",
      "patterns": [
        "default"
      ],
      "successOutput": "{stdout}",
      "errorOutput": "{stdout}\n{stderr}",
      "fatalOutput": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
      "startMessage": null,
      "successMessage": "Executed : {fullCommand}",
      "errorMessage": "Executed : {fullCommand}\nReturned with code {exitStatus}\n{stderr}",
      "fatalMessage": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
      "menus": [
        "env"
      ],
      "startScript": null,
      "successScript": null,
      "errorScript": null,
      "scriptOnStart": false,
      "scriptOnSuccess": false,
      "scriptOnError": false,
      "notifyOnStart": false,
      "notifyOnSuccess": true,
      "notifyOnError": true,
      "input": null
    }
  ]
}
于 2017-10-25T19:56:16.503 回答