标签: ts-node

在文件保存时自动编译 TypeScript 文件

我希望将普通的 node.js 项目移至 TypeScript,并且很好奇如何使用最新更改重新启动服务器,而无需每次进行更改时都从命令行运行 tsc。

我从这个答案中看到两个选项:ts-nodetsc --watch

有人可以提供一些关于这两个选项之间差异的信息吗?我知道它们实现了相同的目标,但它们有何不同?在什么情况下我应该使用其中一种而不是另一种?

typescript ts-node

6
推荐指数
1
解决办法
1万
查看次数

为什么 ts-node 不编译 typescript 文件?

为什么 ts-node 不编译和执行 typescript 文件?它在终端中使用,如“ts-node scriptfile”,它只返回一个空行。怎么了?谢谢您的帮助。

javascript node.js typescript ts-node

6
推荐指数
1
解决办法
8024
查看次数

TypeScript Mocha 测试的 Vscode 断点

我已经开始使用 TypeScript 开发 Node/ExpreeJS 项目。\n我应该注意,我没有直接运行节点。我正在 Docker 中运行节点,但我没有看到任何原因表明这会成为问题。

\n\n

我使用 vscode 作为编辑器,并尝试为 Mocha 测试配置调试启动配置。

\n\n

我的启动配置是

\n\n
{\n    "type": "node",\n    "request": "launch",\n    "name": "SK - Mocha Tests",\n    "cwd": "${workspaceRoot}",\n    "runtimeExecutable": "make",\n    "runtimeArgs": [\n        "test-brk"\n    ],\n    "port": 9321,\n    "console": "integratedTerminal",\n    "internalConsoleOptions": "neverOpen",\n    "protocol": "inspector",\n    "sourceMaps": true,\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

make test-brk命令只是映射到在容器内docker exec执行的命令。npm run test-brk

\n\n

我的 package.json 包含此脚本定义test-brk

\n\n

"test-brk": "mocha --require source-map-support/register --require node_modules/ts-node/register --inspect-brk=0.0.0.0:9222 --debug-brk --exit test/**/*.spec.ts"

\n\n

从 vscode运行SK - Mocha Tests调试任务会启动 Mocha …

mocha.js node.js typescript visual-studio-code ts-node

6
推荐指数
1
解决办法
1363
查看次数

为 VS Code / ts-node / ts-node-dev 指定备用 tsconfig.json

我正在将我的项目从 JavaScript 迁移到 Typescript。

我希望tsconfig.json在 VS Code 中默认显示更严格的警告,但有一个替代方案,tsconfig.json具有更宽松的tsc编译器选项,以允许成功构建。

迁移计划是随着时间的推移逐渐strict确定备用的 just-compile-it-dammit 文件中的选项tsconfig-dev.json

我可以通过--project alt-tsconfig.jsontsc指定替代方案tsconfig.json

如何指定与andtsconfig.json一起使用哪个?ts-nodets-node-dev

tsconfig visual-studio-code ts-node ts-node-dev

6
推荐指数
1
解决办法
2427
查看次数

无法使用 ts.config {"module": "esnext"} 在 nextjs 应用程序中编译带有 ts-node 的typscript 文件

我想了解为什么当“module”设置为“esnext”时下面的代码无法编译。这是配置。

助手/seeder.ts

import * as faker from "faker";
import { User } from "../interfaces/user";

let user: User = {
  userName: faker.name.firstName(),
};

console.log(user);
Run Code Online (Sandbox Code Playgroud)

文件夹结构

pages
components
helpers
|_run.ts
interfaces
|_user.d.ts
package.json
tsconfig.json
Run Code Online (Sandbox Code Playgroud)

包.json

{
  "name": "with-typescript",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint"
  },
  "dependencies": {
    "next": "11.1.2",
    "react": "17.0.2",
    "react-dom": "17.0.2", ....
  },
  "devDependencies": {
    "@types/faker": "^5.5.8",
    "@types/node": "^16.7.10",
    "@types/react": "17.0.20",
    "chai": "^4.3.4",
    "esm": "^3.2.25",
    "faker": "^5.5.3",
    "typescript": …
Run Code Online (Sandbox Code Playgroud)

commonjs node.js typescript next.js ts-node

6
推荐指数
0
解决办法
601
查看次数

无法运行 TS 节点 + ES 应用程序 - 要么得到“ERR_UNKNOWN_FILE_EXTENSION”或“new ERR_MODULE_NOT_FOUND”

我正在尝试将我的代码编译为 ES 代码(使用"type": "module"内部 package.json 和"module": "esnext"内部 tsconfig.json)。

我无法使用以下 3 种方法中的任何一种来运行它:

  1. ts-node src/server.ts结果是:
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /Users/ilmoi/Dropbox/crypto_bc/dbricks/mvp/server/src/server.ts
    at new NodeError (node:internal/errors:363:5)
    at Loader.defaultGetFormat [as _getFormat] (node:internal/modules/esm/get_format:71:15)
    at Loader.getFormat (node:internal/modules/esm/loader:105:42)
    at Loader.getModuleJob (node:internal/modules/esm/loader:243:31)
    at Loader.import (node:internal/modules/esm/loader:177:17)
    at Object.loadESM (node:internal/process/esm_loader:68:5)
Run Code Online (Sandbox Code Playgroud)

这个线程来看,这似乎是 ts-node 的问题。

  1. 所以我尝试node --loader ts-node/esm ./src/server.ts得到这个:
(node:45543) ExperimentalWarning: --experimental-loader is an experimental feature. This feature could change at any time
(Use `node --trace-warnings ...` to show where the …
Run Code Online (Sandbox Code Playgroud)

node.js typescript ts-node

6
推荐指数
2
解决办法
3733
查看次数

tsconfig 导致 [ERR_REQUIRE_ESM]:必须使用 import 加载 ES 模块

我已经知道如何解决该错误[ERR_REQUIRE_ESM]: Must use import to load ES Module

\n

但我注意到这是由设置来引用引起的,paths我不知道确切的原因。node_modulestsconfig.json

\n

tsconfig.json

\n
{\n  "compileOnSave": false,\n  "compilerOptions": {\n       "paths": {\n          "*": ["node_modules/*", "types/*"]                  \xe2\x80\x8b\n       }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

删除 "*": ["node_modules/*", "types/*"]喜欢这个问题,但我想知道为什么?

\n

tsconfig-paths特别是在注册ts-node然后运行时会出现此错误webpack -c webpack.config.ts

\n

tsconfig.json:

\n
{\n  "compileOnSave": false,\n  "compilerOptions": {\n       "paths": {\n          "*": ["node_modules/*", "types/*"]                  \xe2\x80\x8b\n       \xe2\x80\x8b}\n  },\n  "ts-node": {\n     "require": ["tsconfig-paths/register"]\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

完整的错误跟踪:

\n
(node:6087) UnhandledPromiseRejectionWarning: Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: …
Run Code Online (Sandbox Code Playgroud)

node.js typescript webpack ts-node

6
推荐指数
0
解决办法
1223
查看次数

将 tsconfig-paths 与 es 模块一起使用

我有一个使用 commonjs 模块的打字稿项目,我用ts-node它来运行它并在运行时tsconfig-paths解析tsconfig.compilerOptions.paths

现在我希望我的项目迁移到使用es模块,所以我做了一些更改:

  • 添加type: module到 package.json
  • 更改module: commonjsES2022tsconfig.json
  • 将命令更改ts-nodenode --loader ts-node/esm

现在一切都工作正常,但似乎tsconfig-paths在 esm 中不起作用。

最小复制品:

在这两个项目中:

  • 运行npm run build以测试使用带有 esm 的 typescript 进行编译
  • 运行npm start测试ts-node
  • 运行npm start:paths测试ts-nodetsconfig-paths

node.js typescript tsconfig ts-node tsconfig-paths

6
推荐指数
0
解决办法
1526
查看次数

将“type: module”添加到 package.json 后出现未知的文件扩展名错误

我正在使用 TypeScript,使用现代导入语句。运行nodemon(然后使用ts-node)这显然会导致SyntaxError: Cannot use import statement outside a module. 很公平,所以我添加"type": "module"到我的package.json文件中。在不更改任何其他内容的情况下,新错误现在显示为:TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for .../file.ts。请记住,在添加之前完全相同的配置可以很好地"type":"module"运行文件。.tsNodemon 仍然正确使用 ts-node,如错误上方的行所示:[nodemon] starting ts-node src/file.ts

所以我很困惑:如果不使用"type":"module"现代进口,一切都会正常工作。添加现代进口会增加一个合理的错误。但试图解决这个问题"type":"module"会产生奇怪的行为。

我还尝试从主 .ts 文件中删除所有内容,仅添加 console.log 语句。如果没有"type":"module"在我的 package.json 文件中,这会很好地打印到日志中。立即添加"type":"module"回来会再次导致未知文件扩展名错误。

简单的说:

这工作正常:

// File.ts
console.log("test")

// package.json
{
    ...
}

// Output
test
Run Code Online (Sandbox Code Playgroud)

这会导致错误:

// File.ts
console.log("test")

// package.json
{
    "type": "module",
    ...
} …
Run Code Online (Sandbox Code Playgroud)

typescript nodemon package.json ts-node

6
推荐指数
0
解决办法
1199
查看次数

如何同时使用普通导入和顶级等待?

import x from y我想在 ts-node 中同时使用导入 ( ) 和顶级等待。但是,如果我按照顶级等待的要求将我的更改tsconfig.compilerOptions.module为或更高,我会得到:es2017

SyntaxError: Cannot use import statement outside a module
Run Code Online (Sandbox Code Playgroud)

解决这个问题是根据无数的 GH 问题和 SO 问题来设置,从而导致tsconfig.compilerOptions.modulecommonjs

Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', or 'nodenext', and the 'target' option is set to 'es2017' or higher
Run Code Online (Sandbox Code Playgroud)

我怎样才能两者兼得?一定有办法...

tsconfig.json:

{
  "compilerOptions": {
    "declaration": true,
    "module": "esnext",
    "target": "es2017",
    "moduleResolution": "node",
    "esModuleInterop": true,
    "noImplicitAny": true,
    "removeComments": true,
    "preserveConstEnums": true,
    "sourceMap": true, …
Run Code Online (Sandbox Code Playgroud)

typescript tsconfig ts-node ts-node-dev

6
推荐指数
0
解决办法
1397
查看次数