我有一个用 Typescript 编写的 Node.js 项目,具有以下依赖项:
"dependencies": {
...
"@uniswap/smart-order-router": "^2.5.15",
从这个库包中,我在项目中导入了一些东西:
import { AlphaRouter, ... } from '@uniswap/smart-order-router'
然后像这样使用它:
const routeToRatioResponse: SwapToRatioResponse = await router.routeToRatio(
token0Balance,
token1Balance,
p,
{
ratioErrorTolerance: new Fraction(5, 100),
maxIterations: 1,
},
{
swapOptions: {
recipient: wallet.address,
slippageTolerance: new Percent(5, 100),
deadline: deadlineValue
},
addLiquidityOptions: {
recipient: wallet.address
}
}
)
我在上面的第一行调用
router.routeToRatio()
时设置了一个断点。使用 VS Code 调试器时,执行会在该行正确停止。但是,当我单击“单步执行”时,我根本不会单步执行该函数,而是转到整个函数调用后的行。
该库项目是用 Typescript 编写的。代码在这里:https://github.com/Uniswap/smart-order-router。请注意,它的
tsconfig.json
此处的 inlineSourceMap
为 true:https://github.com/Uniswap/smart-order-router/blob/main/tsconfig.json#L9.
我的
node_modules
目录中似乎没有库项目的 TS 源。当我按住 Ctrl 键并单击函数名称时,VS Code 会将我带到 ./node_modules/@uniswap/smart-order-router/build/main/src/routers/alpha-router/alpha-router.d.ts
(没有实现代码,只有类声明),而不是名为 alpha-router.ts
的文件。在node_modules
下挖掘,我似乎没有该文件。
这个回答的问题提到库项目应该在
sourceRoot
中设置 tsconfig.json
,但事实并非如此。不过,我不拥有该图书馆项目,所以我无法更改其中的任何内容。
(编辑1)这是我的
launch.json
:
{
"version": "0.2.0",
"configurations": [
{
"name": "foo",
"type": "node",
"program": "${workspaceFolder}/foo/src/index.ts",
"request": "launch",
"skipFiles": [
"<node_internals>/**"
],
"preLaunchTask": "tsc: build - foo/tsconfig.json",
"outFiles": [
"${workspaceFolder}/**/*.js"
],
"cwd": "${workspaceFolder}/foo"
}
]
}
(编辑2):根据到目前为止的评论,我现在将调试感兴趣的依赖项安装为本地文件夹(在
npm install
意义上)。 package.json
看起来像这样:
"dependencies": {
...
"@uniswap/smart-order-router": "file:../smart-order-router",
...
tsconfig.json
缺少 "allowJs"
。我必须直接在我的package.json
中安装一些依赖项的依赖项。现在使用 tsc 构建代码不会出现错误(无需更改 TS 源中导入的任何路径),但现在调试器已完全损坏。
调试器在我的
index.ts
的第一行的断点处停止,并且会跳过一些行,但随后执行会在此处停止,没有任何错误:node_modules/antlr4ts/index.js
VSC 中调试控制台上唯一的内容是:
/home/e/.nvm/versions/node/v14.15.4/bin/node ./node_modules/antlr4ts/index.js
这里重要的是在库中包含 typescript 源代码,并配置 launch.json 以正确解析源映射位置
这里我有一个视频解释了node_modules内的更改和调试打字稿代码