Node.js 将typescript与节点一起使用的最佳实践

Node.js 将typescript与节点一起使用的最佳实践,node.js,typescript,testing,build,jestjs,Node.js,Typescript,Testing,Build,Jestjs,对于react R,有一个创建react应用程序,它将项目设置中的最佳实践编成代码 节点中缺少某些内容。如果我想在node.js上开发和部署typescript应用程序,我至少需要3个“目标”: start运行应用程序的开发版本 测试执行单元测试(如jest) build将typescript编译为节点可以理解的内容-用于部署 对于所有这些功能,都有像和这样的工具 这一切都有点管用,但我有各种各样的打嗝。当前,package.json中的scripts部分如下所示: "scri

对于react R,有一个创建react应用程序,它将项目设置中的最佳实践编成代码

节点中缺少某些内容。如果我想在node.js上开发和部署typescript应用程序,我至少需要3个“目标”:

  • start运行应用程序的开发版本
  • 测试执行单元测试(如jest)
  • build将typescript编译为节点可以理解的内容-用于部署
对于所有这些功能,都有像和这样的工具

这一切都有点管用,但我有各种各样的打嗝。当前,
package.json
中的
scripts
部分如下所示:

  "scripts": {
    "build": "tsc -p src",
    "start": "yarn run nodemon -e js,json,graphqls,ts,yaml --signal SIGHUP -x ts-node src/index.js",
    "test": "rm -Rf dist/ ; yarn run ts-jest --testPathIgnorePatterns=tests/",
  },
但这有各种各样的问题
tsc
使用
src/tsconfig.json
。另外两个使用
/tsconfig.json
。否则,输出将在
/dist/src/
中,并且目录深度的差异将打乱对非源文件的相对文件访问

ts节点
tsc
似乎报告了不同的错误。例如,
tsc
似乎可以处理js和ts文件意外共存的问题,而ts节点由于不透明的
发出错误而崩溃。
/dist
的内容混淆了其他工具-从
/dist
而不是从
/src
加载和执行文件


那么,我如何使用相同的配置文件设置重新加载开发服务器(
纱线开始
)、测试运行器(
纱线测试
)和生产编译(
纱线构建
)呢,在相同的目录深度上休息,行为也一样?

我不认为有像create react app这样的开箱即用的解决方案,除非你找到一些包含你需要的一切并使用它们的样板库。您可以设置webpack,它可以用于构建和开发,但是配置它可能需要一段时间,尽管在新版本中更容易。汇总也是一个很好的解决方案

无论如何,对于
tsc
,您可能不需要
-p src
选项,它指定项目的根目录,即
tsconfig
所在的位置,而不是源文件的根目录。此选项应指向
tsconfig
所在的文件夹,在
tsconfig
中,您可以使用
include
files
字段指定源文件的位置

说到
nodemon
运行
node
而不是
ts node
并将其注册为模块可能是更好的选择:

nodemon -r ts-node/register src/index.js

另外,要清理您的
package.json
,您可以将命令行选项移动到
nodemon.json
。您可能会找到更多关于如何解决internet上可能发生的其他冲突(如处理这些嵌套路径)的指南。不确定dist的问题是什么,但是构建文件夹不应该混淆任何工具,这个问题不够具体。如果你问的是一般的最佳实践,那是一个离题的话题。如果你问的是具体的问题,那么就把注意力集中在它上面。嵌套太深,相对路径无法工作-嵌套的问题并不明显。但这有各种各样的问题。tsc使用src/tsconfig.json-不清楚问题出在哪里。如果需要多个配置,请使用tsconfig继承。FWIW将tsconfig设置为src不是一个好的做法。这不是一个源文件。谢谢你的提示,将配置和代码分开。我试图澄清这个问题。看起来问题仅仅是TS没有正确配置,而不是一般的设置。至少在应用程序和测试中,可以并且可能应该有多个配置来扩展一个公共配置。您可能缺少的部分是
rootDir
exclude
include
。请查看解决方案。我是在
nodemon.json
上暗示的作者。我个人避免在projectroot中使用太多不同的配置文件,并将所有内容都放在package.json中。我猜是个人喜好。由于配置文件是project root中唯一需要的文件类型,所以它不是放置它们的最差位置。您可以为它们使用专用的配置目录,但至少其中一些目录(如linter config和package.json)是分层的,并且会有2个目录(而不是1个目录)与配置混在一起。