我正在开发一个NPM包,使用的类型记录,这意味着消费在反应应用程序。直截了当对吧?我还有一个示例/测试应用程序,它是一个.NET核心托管的React应用程序(直接来自VS2019模板,加上通过NPM添加的类型记录)。尽管构建所有内容并调试示例应用程序都很好,但我无法让Visual调试本地NPM包中的类型记录文件。
NPM包是一个NJSProj。我通过在"build": "tsc"中使用scripts中的package.json来构建它。我的tsconfig.json看起来是这样的:
{
"compilerOptions": {
"baseUrl": ".",
"noEmitOnError": true,
"removeComments": false,
"moduleResolution": "Node",
"target": "es2019",
"lib": [ "es2019", "dom" ],
"strict": true,
"sourceMap": true,
"declaration": false,
"module": "ESNext",
"jsx": "react",
"listFiles": true
},
"include": ["src"],
"exclude": [
"node_modules"
]
}对于示例/测试消费应用程序,我有一个由VS2019模板直接构建的.NET 5托管的React应用程序,以及通过npm安装的类型记录。为了让示例应用程序使用本地包,我在package文件夹中使用npm link。然后,在示例应用程序的ClientApp文件夹中,在npm install之后,我使用npm link mypackagename创建依赖项。
在我的示例应用程序的代码中,我能够使用import * as MyPackage from 'mypackagename';导入本地包,使用它的导出,所有这些都构建并运行良好。但是,我无法让类型记录调试在Visual中工作。
我在包中的.TS文件中设置的任何断点都不会在运行时被“绑定”。此外,如果我在示例应用程序JS/TS代码中设置了一个断点,然后再调用我的包,然后进入我的包的代码,那么它就会进入编译的Javascript版本(有趣的是,不是主包版本),而不是原始的TS代码。各个源映射都在那里,另外,当前的行对于Javascript版本是错误的,但是对于类型记录版本来说是正确的,这让我认为它确实是在应用.MAP文件,而只是找不到.TS。另一件奇怪的事情是,示例应用程序代码中的Intellisense可以很好地看到我的包和它的导出,并且我可以将F12放入示例消费应用程序引用的类或函数名中,并从本地包源代码中打开正确的TS文件。因此,Visual清楚地知道如何找到源代码,甚至看上去都在查看地图文件,但不允许我设置断点,并且在执行步骤后不导航到正确的文件。
我尝试过的一种方法是在示例React应用程序上使用eject,看看我是否可以直接修改webpack.config.js,并试图迫使它编译包中的类型记录,而不是在单独的构建步骤中使用TSC,但我似乎找不到需要更改的正确条目(创建-反应-应用-generated webpack.config.js是一个怪物)。
我还尝试这样更改我的tsconfig设置:
"sourceMap": false,
"inlineSources": true,
"inlineSourceMap": true,这是朝着正确方向迈出的一步,因为如果我在示例应用程序中设置一个断点,我现在至少可以进入包的TS文件。但是,Visual仍然不会将它与我的磁盘上的实际TS文件相关联,而且我仍然无法在NSProj中的这些文件中设置断点。
最后,请注意,这是Visual 2019,而不是Visual代码。我还没有尝试代码,但我想坚持完整的VS2019,如果可能的话。
因此,出现了两个主要问题:
如何在VisualStudio?
tsc重新构建它。我更希望我的示例应用能够编译我的包的TS源代码以及示例应用程序本身的代码,但这就是我怀疑我必须深入了解React脚本的地方,在这些构建链方面,我是个新手。谢谢你的建议!
发布于 2021-04-01 19:23:47
哇,昨天到今天,经过了10个小时的试错之后,我偶然发现了起作用的神奇组合。
tsc构建npm包来进行调试。实际上,在调试运行期间,本地包的tsconfig.json将被忽略。相反,我想出了如何让webpack在构建示例消费应用程序npm run eject,扩展所有隐藏脚本,最重要的是,继续使用scripts/paths.js中的
eject之后创建的)--我必须向我的模块源代码添加一个localModuleSrc路径,以及appSrc文件夹D 17文件夹H 218H 119我必须修改d20才能使用awesome-typescript-loader而不是babel。babel-loader显然拒绝在src之外编译类型记录文件。然后,我将它用于appSrc和appSrc中的所有内容。{
test: /\.(js|mjs|jsx|ts|tsx)$/,
include: [paths.appSrc, paths.localModuleSrc],
loader: require.resolve('awesome-typescript-loader'),
},最后,
不得不在plugins之前添加dev-tool: 'source-map'。如果没有此操作,调试排序会正常工作,但断点总是关闭1或2行。然后,令我惊讶的是,我的本地包源和我的示例消费应用程序中的断点开始出现。
因此,底线似乎是,babel-loader不适合这个用例,因为我猜它不会触及src以外的任何东西。但awesome-typescript-loader不愧为自己的名字。
https://stackoverflow.com/questions/66906132
复制相似问题