首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual在.NET5宿主的React应用程序中使用的本地NPM包中调试类型记录

Visual在.NET5宿主的React应用程序中使用的本地NPM包中调试类型记录
EN

Stack Overflow用户
提问于 2021-04-01 14:12:40
回答 1查看 169关注 0票数 0

我正在开发一个NPM包,使用的类型记录,这意味着消费在反应应用程序。直截了当对吧?我还有一个示例/测试应用程序,它是一个.NET核心托管的React应用程序(直接来自VS2019模板,加上通过NPM添加的类型记录)。尽管构建所有内容并调试示例应用程序都很好,但我无法让Visual调试本地NPM包中的类型记录文件。

NPM包是一个NJSProj。我通过在"build": "tsc"中使用scripts中的package.json来构建它。我的tsconfig.json看起来是这样的:

代码语言:javascript
复制
{
  "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设置:

代码语言:javascript
复制
 "sourceMap": false,
 "inlineSources": true,
 "inlineSourceMap": true,

这是朝着正确方向迈出的一步,因为如果我在示例应用程序中设置一个断点,我现在至少可以进入包的TS文件。但是,Visual仍然不会将它与我的磁盘上的实际TS文件相关联,而且我仍然无法在NSProj中的这些文件中设置断点。

最后,请注意,这是Visual 2019,而不是Visual代码。我还没有尝试代码,但我想坚持完整的VS2019,如果可能的话。

因此,出现了两个主要问题:

如何在VisualStudio?

  • Possibly相关的运行时实际调试包的类型记录文件,对于本地Studio?

  • Possibly包是否应该使用不同的构建过程?我注意到,使用这种方法,热重新加载是不可能的,因为每次我都必须使用tsc重新构建它。我更希望我的示例应用能够编译我的包的TS源代码以及示例应用程序本身的代码,但这就是我怀疑我必须深入了解React脚本的地方,在这些构建链方面,我是个新手。

谢谢你的建议!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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中的所有内容。

代码语言:javascript
复制
{
      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不愧为自己的名字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66906132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档