标签: ts-node

使用VS Code调试在Docker容器中使用ts节点运行的TypeScript应用程序时,如何正确设置断点?

我们的应用程序是用TypeScript编写的,并使用Docker,为了避免通过.js文件进行往返,我们使用ts-node运行它直接加载.ts文件.

不幸的是,这似乎使VSCode对于有效的代码行设置断点的位置感到困惑.

此问题通过以下设置显示:

/package.json

{
  "scripts": {
    "start": "node --inspect=0.0.0.0 --require ts-node/register src/index.ts"
  },
  "dependencies": {
    "@types/node": "^10.1.2",
    "ts-node": "^6.0.3",
    "typescript": "^2.8.3"
  }
}
Run Code Online (Sandbox Code Playgroud)

/tsconfig.json

{
  "compilerOptions": {
    "target": "ES2017",
    "module": "commonjs", 
    "outDir": "./dist",
    "rootDir": "./src",    
    "esModuleInterop": true
  }
}
Run Code Online (Sandbox Code Playgroud)

/ Dockerfile

FROM node

RUN mkdir /home/node/app
WORKDIR /home/node/app
COPY package.json /home/node/app
RUN npm install && npm cache clean --force
COPY . /home/node/app
CMD [ "npm", "start" ]
Run Code Online (Sandbox Code Playgroud)

/docker-compose.yml

version: "3.4"

services:
  http:
    build: .
    ports:
      - "8000:8000" …
Run Code Online (Sandbox Code Playgroud)

remote-debugging typescript docker visual-studio-code ts-node

18
推荐指数
1
解决办法
843
查看次数

如何将 ts-node ESM 与节点模块一起使用?

注意:我知道以下问题是关于实验性功能的。我在 ts-node 讨论论坛上创建了一个克隆。不过,我相信 StackOverflow 拥有更广泛的曝光度,并且会在更短的时间内找到解决方案。

\n

我正在尝试制作一个简单的脚本,从一个位置读取文件并处理它。这是我到目前为止所得到的,遵循#1007

\n

节点:v12.22.1

\n
my-app\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .eslintrc.cjs\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .gitignore\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 in\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 given.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 node_modules\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 out\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package-lock.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 helper.ts\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.ts\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tsconfig.json\n
Run Code Online (Sandbox Code Playgroud)\n

包.json

\n
my-app\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .eslintrc.cjs\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .gitignore\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 in\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 given.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 node_modules\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 out\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package-lock.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 helper.ts\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.ts\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tsconfig.json\n
Run Code Online (Sandbox Code Playgroud)\n

tsconfig.json

\n
{\n  "compilerOptions": {\n    "target": "es5",                                /* Specify ECMAScript target version: \'ES3\' (default), \'ES5\', \'ES2015\', \'ES2016\', \'ES2017\', \'ES2018\', \'ES2019\', \'ES2020\', or \'ESNEXT\'. */\n    "module": "ESNext",                           /* Specify module code …
Run Code Online (Sandbox Code Playgroud)

node.js typescript ts-node

18
推荐指数
2
解决办法
5万
查看次数

使用ts-node执行时,用typescript导入nodejs`fs`?

我正在尝试使用ts-node运行以下代码.

import { writeFileSync, readFileSync } from 'fs';
Run Code Online (Sandbox Code Playgroud)

但是我得到:

src/main/ts/create.ts (1,45): Cannot find module 'fs'. (2307)
Run Code Online (Sandbox Code Playgroud)

我需要做什么来允许typescript导入fs模块?

node.js typescript typescript2.2 ts-node

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

当tsc成功编译项目时,ts-node忽略d.ts文件

成功编译了我的TypeScript项目之后,我打算在VS Code的调试模式下运行它ts-node.问题是,ts-node找不到d.ts我创建的文件(虽然tsc它没有问题).

项目结构是:

/
    conf/
    dist/
    src/
        types/
package.json
tsconfig.json
Run Code Online (Sandbox Code Playgroud)

tsconfig.json 相关条目是:

{
    "compilerOptions": {
        "target": "es2017",
        "module": "commonjs",
        // "lib": [],
        "sourceMap": true,
        "outDir": "dist",
        "rootDir": "src",
        "moduleResolution": "node",
        "baseUrl": ".",
        "paths": {
            "*": [
                "node_modules/*",
                "src/types/*"
            ]
        },
        // "rootDirs": [],
        // "typeRoots": [],
        // "types": [],
    },
    "include": [
        "src/**/*"
    ]
}
Run Code Online (Sandbox Code Playgroud)

定义文件ts-node找不到的是src/types/global.d.ts:

import { App } from '../App';

declare global {
    namespace NodeJS { …
Run Code Online (Sandbox Code Playgroud)

typescript typescript-typings ts-node

16
推荐指数
5
解决办法
4553
查看次数

如何将参数传递给 ts-node 处理的脚本

我刚开始使用 ts-node。这是一个非常方便的工具。运行时间看起来很清楚。但它不适用于 CLI 解决方案。我无法将参数传递到编译的脚本中。

ts-node --preserve-symlinks src/cli.ts -- printer:A
Run Code Online (Sandbox Code Playgroud)

这是行不通的。我在寻求帮助。

ts-node

13
推荐指数
3
解决办法
8354
查看次数

TS 节点:找不到源文件

我的项目一直ts-node用于运行 JavaScript 和 TypeScript 的混合。最近它停止工作,没有明显的原因。在最简单的层面上,这是它的运行方式和它产生的错误:

$ TS_NODE_PROJECT=./tsconfig.json ../../node_modules/.bin/ts-node app.js                                                                                   MSTR-1513
INFO   | Arrow/1.6.0
No deployment manifest found
Uncaught Exception Could not find sourceFile: '/Users/jonah/Projects/myapp/server/src/v1/route/Routes.ts' in [].
Error: Could not find sourceFile: '/Users/jonah/Projects/myapp/server/src/v1/route/Routes.ts' in [].
    at getValidSourceFile (/Users/jonah/Projects/myapp/node_modules/typescript/lib/typescript.js:122211:23)
    at Object.getEmitOutput (/Users/jonah/Projects/myapp/node_modules/typescript/lib/typescript.js:122580:30)
    at getOutput (/Users/jonah/Projects/myapp/node_modules/ts-node/src/index.ts:354:30)
    at Object.compile (/Users/jonah/Projects/myapp/node_modules/ts-node/src/index.ts:395:32)
    at Module.m._compile (/Users/jonah/Projects/myapp/node_modules/ts-node/src/index.ts:473:43)
    at Module._extensions..js (module.js:663:10)
    at Object.require.extensions.(anonymous function) [as .ts] (/Users/jonah/Projects/myapp/node_modules/ts-node/src/index.ts:476:12)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
Run Code Online (Sandbox Code Playgroud)

摘录app.js

const Routes = require('./v1/route/Routes').default;
server.app.use('/v1', new Routes().router);
Run Code Online (Sandbox Code Playgroud)

我对错误的这一部分感到非常困惑: …

javascript file-not-found typescript ts-node

12
推荐指数
1
解决办法
2060
查看次数

TypeORM getRepository.find() 不包括外键字段

我正在尝试获取包含在 my 中的所有列entity,但我只能获取与其他实体没有任何关系的列。

我使用此代码块将所有行提取到此存储库。

private translationTextRepository = getRepository(TranslationText);

async all(request: Request, response: Response, next: NextFunction) {
    return this.translationTextRepository.find();
}
Run Code Online (Sandbox Code Playgroud)

entity是这个存储库的。

@Entity('TranslationText')
export class TranslationText {

    @PrimaryGeneratedColumn()
    ID: number;

    @Column()
    CreatedBy: string;

    @Column({ type: 'timestamp', default: () => 'CURRENT_TIMESTAMP' })
    CreatedDate: Date;

    @Column()
    Status: boolean;

    @Column({ nullable: true, default: null })
    ModifiedBy: string;

    @Column({ type: 'timestamp', nullable: true, default: null })
    ModifiedDate: Date;

    @Column()
    Text: string;

    @ManyToOne((type) => Locale, (locale) => locale.ID)
    @JoinColumn({ name: 'LocaleID' })
    LocaleID: …
Run Code Online (Sandbox Code Playgroud)

orm typeorm ts-node

12
推荐指数
2
解决办法
5888
查看次数

Ts-node:SyntaxError:不能在模块外使用导入语句

我试图在项目中使用顶层,看到有必要将模块从 tscofnig 更改为 esnext 或 system,但由于某种原因我的 ts-node 错误。而且我已经把 type: module 我试图使用标志:--experimental-modules 但错误仍然不知道如何解决。

包.json:

{
  "name": "micro-hr",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "type": "module",
  "scripts": {
    "commit": "git-cz",
    "build": "babel src --extensions \".js,.ts\" --out-dir dist --copy-files --no-copy-ignored",
    "start:dev": "ts-node-dev --experimental-modules --inspect --respawn --transpile-only --ignore-watch node_modules -r tsconfig-paths/register src/index.ts",
    "start:debug": "node start --debug --watch",
    "start:prod": "node dist/index.ts",
    "test": "jest",
    "lint": "eslint --fix",
    "lint2": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js --config ./ormconfig.ts",
    "migration:generate": "ts-node ./node_modules/typeorm/cli.js migration:generate -n"
  },
  "devDependencies": { …
Run Code Online (Sandbox Code Playgroud)

typescript ts-node

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

手动注册节点模块

题:

我在TypeScript中有一个项目,它使用了我在计算机上无法访问的几个API(它们存在于Web上).代码将在本地编译良好,因为我在foo.d.ts文件中有所有API ,因此系统知道它们存在于某处.

但是,我想用NodeJS应用程序对代码的部分单元进行单元测试.我可以很好地将代码导入节点,但每当我到达从定义文件导入模块的代码时,我都会收到以下错误:

Error: Cannot find module 'messages'
    at Function.Module._resolveFilename (module.js:527:15)
    at Function.Module._load (module.js:476:23)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (~/dev/repos/sample_typescript_fail/App.js:3:18)
    at Module._compile (module.js:624:30)
    at Object.Module._extensions..js (module.js:635:10)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
...
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为该代码仅在本地定义,并且不存在.

我可以手动将模块注册到NodeJS,比如

 Registry.register('messages', () => {...});
Run Code Online (Sandbox Code Playgroud)

这样我就可以用polyfill进行编译和测试?


这是一个示例应用程序

package.json

{
  "name": "sample_typescript_declare_issue",
  "version": "1.0.0",
  "description": "",
  "main": "index.ts",
  "scripts": {
    "start": "ts-node index.ts"
  },
  "author": "",
  "license": "MIT"
}
Run Code Online (Sandbox Code Playgroud)

index.ts

import {App} from "./App";

console.log("Starting program");

// How …
Run Code Online (Sandbox Code Playgroud)

module node.js typescript ts-node

11
推荐指数
1
解决办法
806
查看次数

找不到模块“tsconfig-paths/register”

我正在尝试在 CLI 中使用 ts-node 运行 typescript 脚本,这意味着我没有 package.json。

这是我尝试运行的命令:

npx -p typescript@latest -p ts-node@latest -p @types/node@latest ts-node -T --project scripts/tsconfig.script.json scripts/my-script.ts
Run Code Online (Sandbox Code Playgroud)

当我在脚本中使用相对路径时,它工作得非常好。

然后我尝试通过启用路径来增强它,tsconfig.script.json以便能够从它们导入。

我想使用tsconfig-paths。这是我尝试运行的命令:

npx -p typescript@latest -p ts-node@latest -p @types/node@latest -p tsconfig-paths@latest ts-node -T -r tsconfig-paths/register --project scripts/tsconfig.script.json scripts/my-script.ts
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

Error: Cannot find module 'tsconfig-paths/register'
Run Code Online (Sandbox Code Playgroud)

我尝试过调整参数的顺序ts-node以及添加/删除选项,但是,我仍然无法使其工作并查看包tsconfig-paths

我错过了什么吗?

提前致谢

typescript ts-node npx tsconfig-paths

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