【问题标题】:Is there source map support for typescript in node / nodemon?node/nodemon 中的 typescript 是否有源映射支持?
【发布时间】:2017-06-24 14:07:24
【问题描述】:

我有一个用 typescript@2 编写的节点项目。

我的 tsconfig 将 sourceMap 设置为 true 并生成了 *.map.js 文件。当我通过nodenodemon 执行转译的*.js JavaScript 文件时,我只看到与js 文件相关的错误消息,而不是映射的打字稿文件;我认为它完全被忽略了。

sourceMap 支持是否仅用于浏览器支持?或者我可以将它与 node 或 nodemon 一起使用吗?如果是后者,我将如何启用它?

我想查看从已执行的 javascript 文件中检测到的相对于原始 typescript 文件的运行时错误。

【问题讨论】:

    标签: javascript node.js typescript nodemon


    【解决方案1】:

    我发现这个 npm 模块似乎可以解决问题:

    https://github.com/evanw/node-source-map-support

    在您的节点项目的根目录下运行 npm install source-map-support --save 并将 import 'source-map-support/register' 添加到您的 main.ts 或 index.ts 文件中。

    就是这样。

    【讨论】:

      【解决方案2】:

      源地图支持与节点完美配合

      你需要做的就是添加

      "source-map-support": "0.4.11",
      

      运行到dependenciesdev-dependencies in package.json

      npm install --save source-map-support
      

      在你的入口点 ts 文件中,只需在顶部添加

      require('source-map-support').install()
      

      (注意:这是调用 nodeJS require - 不需要 source-map-support 定义文件)

      【讨论】:

      • 在生产中使用它有什么缺点吗? (服务器端)
      • @Sev 据我们所知并非如此(我们确实在生产中使用它)
      【解决方案3】:

      我最近在我的 express 应用中实现了这个功能。步骤如下:

      安装所需的库:

      npm install --save-dev source-map-support

      在你的入口点(例如app.ts):

      require('source-map-support').install();

      在您的app.ts 中,您可能还需要更好地记录承诺中的错误:

      process.on('unhandledRejection', console.log);

      在您的tsconfig 下,compilerOptions

      "inlineSourceMap": true

      【讨论】:

      • inlineSourceMap 和 sourceMap 编译器选项是互斥的
      • 如果您将 cli 用法添加到您的答案中(正如我自己指出的那样),我将接受您的并删除我自己的。 (stackoverflow.com/a/58455205/457268)
      • @k0pernikus 谢谢。抱歉,我不是 100% 确定我理解。随时编辑我的答案以显示您的意思。
      • 有什么方法可以在本地执行此操作而不会使用source-map-support 使包膨胀?
      • 从节点 v12 开始,您可以使用标志 --enable-source-maps
      【解决方案4】:

      安装源地图支持:

      npm install source-map-support
      

      (我也在生产环境中运行,因为它极大地有助于从发生错误时的日志中查找错误。我没有经历过大的性能影响,但您的体验可能会有所不同。)

      添加到您的tsconfig.json

      {
         "compilerOptions": {
            "sourceMap": true
         }
      }
      

      运行 JavaScript 文件时,添加 require 参数:

      nodemon -r source-map-support/register dist/pathToJson.js
      
      node -r source-map-support/register dist/pathToJson.js
      

      或者,您可以添加入口调用:

      require('source-map-support').install()
      

      但我发现这个乏味的是具有多个入口点的项目。


      旁注:mocha 也支持 --require / -r 选项,因此要在 mocha 中支持源映射,您也可以使用它调用您的测试,例如类似于:

      NODE_ENV=test npx mocha --forbid-only --require source-map-support/register --exit --recursive ./path/to/your/tests/
      

      【讨论】:

      • 感谢分享,为我节省了很多时间:)
      【解决方案5】:

      这里的答案对于 v12.12.0 之前的 Node 版本是正确的,它添加了(实验性)--enable-source-maps 标志。启用后,源映射将应用于堆栈跟踪,而无需额外的依赖。正如this article 中所展示的,它具有稍微不同但可能有益的行为,即同时包含生成的 .js 文件位置和源文件位置。例如:

      Error: not found
          at Object.<anonymous> (/Users/bencoe/oss/source-map-testing/test.js:29:7)
              -> /Users/bencoe/oss/source-map-testing/test.ts:13:7
      

      【讨论】:

        【解决方案6】:

        对于从 v12.12.0 开始的 Node 版本,在运行 node 时使用 --enable-source-maps 标志。

        示例:node --enable-source-maps main.js

        不要为 v12.12.0 以上的 Node 版本安装“source-map-support”

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-07-22
          • 1970-01-01
          • 2011-04-18
          • 2010-10-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多