向 nodemon 注册时将 --project 传递给 ts-node

Posted

技术标签:

【中文标题】向 nodemon 注册时将 --project 传递给 ts-node【英文标题】:Passing --project to ts-node when it's registered with nodemon 【发布时间】:2019-06-08 14:36:23 【问题描述】:

这个命令用来运行我的服务器:1

nodemon
  -r ts-node/register
  -r tsconfig-paths/register
  --watch server/
  --watch shared/
  --ext ts,tsx,json
  --inspect-brk=24170
  ./server/index.ts

问题是,我需要ts-node 来接收--project ./tsconfig-server.json,而不是使用默认的tsconfig.json。在-r ts-node/register(或其他任何地方)之后简单地包含它会导致bad option: --project 错误。

使用--exec 'node ./node_modules/ts-node/dist/bin.js --project ./tsconfig-amd.json' 代替-r ts-node/register 可以工作,但调试器无法附加到进程。我认为这是因为它试图附加到 nodemon 进程而不是 nodemon 启动的节点进程?

但我不能在这里使用默认的tsconfig.json 文件名,因为VS Code does not support specifying an alternative tsconfig.json 和服务器配置不是我想要用于查看和编辑代码的配置


    该命令实际上是由 VS Code 根据我的.vscode/launch.json 生成的,如下所示:
    
        // Use IntelliSense to learn about possible attributes.
        // Hover to view descriptions of existing attributes.
        // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
            
                "type": "node",
                "request": "launch",
                "name": "nodemon",
                "runtimeExecutable": "node",
                "args": [
                    "$workspaceFolder/server/index.ts"
                ],
                "runtimeArgs": [
                    "$workspaceFolder/node_modules/nodemon/bin/nodemon.js",
                    "-r",
                    "ts-node/register",
                    "-r",
                    "tsconfig-paths/register",
                    "--watch",
                    "server/",
                    "--watch",
                    "shared/",
                    "--ext",
                    "ts,tsx,json"
                ],
                "restart": true,
                "console": "integratedTerminal",
                "internalConsoleOptions": "neverOpen",
                "protocol": "inspector"
            
        ]
    
    

【问题讨论】:

您的问题解决了吗? @EhouarnPerret 不,我没有;我最终放弃了,并使用tsconfig.json 进行服务器配置,而不是我想要的客户端配置。 【参考方案1】:

您需要通过“TS_NODE_PROJECT”环境变量传递--project 值。 我在我的nodemon.json 文件中这样做


    "restartable": "rs",
    "ignore": [".git", "node_modules/**/node_modules", "src/client"],
    "verbose": true,
    "execMap": 
      "ts": "node --require ts-node/register/transpile-only --require tsconfig-paths/register"
    ,
    "watch": ["src/server", "typing"],
    "env": 
      "NODE_ENV": "development",
      "TS_NODE_PROJECT": "src/server/tsconfig.json"
    ,
    "ext": "js,json,ts"

【讨论】:

也可以直接添加到package.json:"nodemonConfig": "env": "TS_NODE_PROJECT": "server/tsconfig.json" 。在 nodemon 文档 (github.com/remy/nodemon#nodemon) 中提供了更多信息。

以上是关于向 nodemon 注册时将 --project 传递给 ts-node的主要内容,如果未能解决你的问题,请参考以下文章

Nodemon安装问题。当我在我的节点 js 中安装 nodemon

nodemon : 无法加载文件 C:Program Files odejs odemon.ps1,因为在此系统上禁止运行脚本。

nodemon : 无法加载文件 C:Program Files odejs odemon.ps1,因为在此系统上禁止运行脚本。

Typescript + Worker Threads的Nodemon抛出错误

嵌入式服务治理方案

第六章:侵入式服务治理