我希望将普通的 node.js 项目移至 TypeScript,并且很好奇如何使用最新更改重新启动服务器,而无需每次进行更改时都从命令行运行 tsc。
我从这个答案中看到两个选项:ts-node和tsc --watch
有人可以提供一些关于这两个选项之间差异的信息吗?我知道它们实现了相同的目标,但它们有何不同?在什么情况下我应该使用其中一种而不是另一种?
为什么 ts-node 不编译和执行 typescript 文件?它在终端中使用,如“ts-node scriptfile”,它只返回一个空行。怎么了?谢谢您的帮助。
我已经开始使用 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}\nRun Code Online (Sandbox Code Playgroud)\n\n该make test-brk命令只是映射到在容器内docker exec执行的命令。npm run test-brk
我的 package.json 包含此脚本定义test-brk
"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"
从 vscode运行SK - Mocha Tests调试任务会启动 Mocha …
我正在将我的项目从 JavaScript 迁移到 Typescript。
我希望tsconfig.json在 VS Code 中默认显示更严格的警告,但有一个替代方案,tsconfig.json具有更宽松的tsc编译器选项,以允许成功构建。
迁移计划是随着时间的推移逐渐strict确定备用的 just-compile-it-dammit 文件中的选项tsconfig-dev.json。
我可以通过--project alt-tsconfig.json来tsc指定替代方案tsconfig.json。
如何指定与andtsconfig.json一起使用哪个?ts-nodets-node-dev
我想了解为什么当“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) 我正在尝试将我的代码编译为 ES 代码(使用"type": "module"内部 package.json 和"module": "esnext"内部 tsconfig.json)。
我无法使用以下 3 种方法中的任何一种来运行它:
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 的问题。
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) 我已经知道如何解决该错误[ERR_REQUIRE_ESM]: Must use import to load ES Module
但我注意到这是由设置来引用引起的,paths我不知道确切的原因。node_modulestsconfig.json
tsconfig.json
\n{\n "compileOnSave": false,\n "compilerOptions": {\n "paths": {\n "*": ["node_modules/*", "types/*"] \xe2\x80\x8b\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n删除 "*": ["node_modules/*", "types/*"]喜欢这个问题,但我想知道为什么?
tsconfig-paths特别是在注册ts-node然后运行时会出现此错误webpack -c webpack.config.ts
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}\nRun 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) 我有一个使用 commonjs 模块的打字稿项目,我用ts-node它来运行它并在运行时tsconfig-paths解析tsconfig.compilerOptions.paths。
现在我希望我的项目迁移到使用es模块,所以我做了一些更改:
type: module到 package.jsonmodule: commonjs为ES2022tsconfig.jsonts-node为node --loader ts-node/esm现在一切都工作正常,但似乎tsconfig-paths在 esm 中不起作用。
最小复制品:
es 模块项目,从 commonjs 项目派生出来,但经过修改以使用 es 模块
在这两个项目中:
npm run build以测试使用带有 esm 的 typescript 进行编译npm start测试ts-nodenpm start:paths测试ts-nodetsconfig-paths我正在使用 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) 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.module:commonjs
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) ts-node ×10
typescript ×9
node.js ×6
tsconfig ×3
ts-node-dev ×2
commonjs ×1
javascript ×1
mocha.js ×1
next.js ×1
nodemon ×1
package.json ×1
webpack ×1