【问题标题】:Best practices for using typescript with node [closed]将 typescript 与节点一起使用的最佳实践 [关闭]
【发布时间】:2021-03-07 05:53:14
【问题描述】:

对于 react r,有 create-react-app ,它记录了项目设置中的最佳实践。

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

  • 开始运行应用的开发版本
  • test 执行单元测试(例如 jest)
  • build 将 typescript 编译为节点可以理解的内容 - 用于部署。

对于所有这些功能,有 ts-jest ts-nodetsc 等工具。

这一切都有些奏效,但我得到了各种各样的小问题。目前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-nodetsc 似乎报告了不同的错误。例如,tsc 似乎可以处理意外共存的 js 和 ts 文件,而 ts-node 会因不透明的emit error 而崩溃。 ./dist 的内容混淆了其他工具 - 你从 ./dist 加载和执行文件,而不是从 ./src

那么我如何设置一个重新加载的开发服务器 (yarn start)、一个测试运行器 (yarn test) 和一个生产编译 (yarn build) 都使用相同的配置文件,在相同的目录深度和行为都一样吗?

【问题讨论】:

  • 问题不够具体。如果您询问一般的最佳实践,那是一个题外话。如果您要询问具体问题,请专注于它。 嵌套太深,无法使用相对路径 - 嵌套问题并不明显。 但这有各种各样的问题。 tsc 使用 src/tsconfig.json - 目前还不清楚问题是什么。如果您需要多个配置,请使用 tsconfig 继承。 FWIW 将 tsconfig 放到 src 不是一个好习惯。这不是源文件。
  • 感谢配置和代码分离的提示。我试图澄清这个问题。
  • 看来问题仅在于 TS 配置不正确,而不是一般设置。至少对于应用程序和测试来说,可以并且很可能应该有几个扩展一个通用配置的配置。您可能缺少的部分是rootDirexcludeinclude
  • 看看this 解决方案。我是作者

标签: node.js typescript testing build jestjs


【解决方案1】:

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

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

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

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

还可以清理您的package.json,您可以将命令行选项移动到nodemon.json。您可能可以找到更多指南,了解如何解决互联网上可能发生的其他冲突,例如处理这些嵌套路径。不确定dist 有什么问题,构建文件夹不应该混淆任何工具

【讨论】:

  • 感谢nodemon.json 的提示。我个人避免在项目根目录中使用太多不同的配置文件,并将所有内容都放在 package.json 中。我猜是个人口味。
  • 由于配置文件是项目根目录中唯一预期的文件类型,因此放置它们并不是最糟糕的地方。您可以为它们使用专用的配置目录,但至少其中一些像 linter config 和 package.json 是分层的,并且会有 2 个 dirs 杂乱无章的配置而不是 1 个。
猜你喜欢
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 2015-11-12
  • 1970-01-01
  • 2022-06-22
  • 2021-06-24
相关资源
最近更新 更多