【问题标题】:Sourcemap missing for typescript based vue file due to lang="ts" attribute由于 lang="ts" 属性,基于 typescript 的 vue 文件缺少源映射
【发布时间】:2020-01-20 17:11:15
【问题描述】:

我遇到了我想将我的 vue 文件从 JS 切换到 Typescript 的问题。

它们看起来像这样(非常标准)

<template>
...
</template>

<script>
...
</script>

并将它们与打字稿一起使用,我读到我需要将脚本标签调整为&lt;script lang="ts"&gt;。这很好用,代码很高兴通过 webpack 构建/转换,我可以启动我的应用程序。唯一的问题是,一旦我将lang="ts" 放入脚本标记中,Chrome 就不再以调试模式显示这些文件,因此似乎缺少它们的源映射信息(尽管我对源映射了解不多)。所以我想知道如何正确获取源映射以及在 Chrome 开发人员模式下显示的文件,因为显然我将需要它再次进行调试。给出了所有其他文件的源映射,并且这些文件在 Chrome 中以开发模式显示(例如,对于普通的 .ts 文件)以及尚未基于 TS 且因此没有lang="ts" 属性的 vue 文件。

这里是我的 ts 和 vue 文件的 webpack 提取

devtool: 'inline-source-map',
module: {
    rules: [
      { test: /\.vue$/,
        loader: 'vue-loader'
      },
      { test: /\.ts$/,
        exclude: /node_modules|vue\/src/,
        loader: "ts-loader",
        options: {
          appendTsSuffixTo: [/\.vue$/]
        }
      }
    ...
    ]
},
resolve: {
    alias: {
      'vue$': 'vue/dist/vue.esm.js'
    },
    extensions: ['*', '.js', '.vue', '.json', '.ts']
  },

以及我的源地图和其他一些可能相关的 tsc 设置

"sourceMap": true,                  
"strict": true,                         
"alwaysStrict": true,                  
"moduleResolution": "node",          
"allowSyntheticDefaultImports": true,  
"esModuleInterop": true,                   

/* Source Map Options */
// "sourceRoot": ""; 
//"mapRoot": "",
//"inlineSourceMap": true,              
// "inlineSources": true  

【问题讨论】:

  • 有同样的问题,但 .vue 文件中引用了 ts 文件。那里的断点将我带到 webpack“和谐”沙拉文件,感觉与真实文件相差了一步。

标签: typescript vue.js webpack vue-component source-maps


【解决方案1】:

我发现devtool = 'cheap-module-eval-source' 可以工作,但 .vue 文件的目录没有显示,文件结尾有点奇怪,但可以工作。但我不认为这是一个很好的解决方案。所以如果某人有更好的选择,请告诉我。 然而,我面临的下一个问题是 Sonarqube 不接受 lang="ts",因为他们还没有实现它(这是那里的功能请求)。

所以最终对我有用的解决方案不是使用 .vue 文件,而是使用https://vuejs.org/v2/guide/typescript.html#Class-Style-Vue-Components 中描述的基于类的 sfc 组件以及一个 vscode 插件来突出显示内联 html 代码。 通过这种方式,我得到了工作 TS、工作源映射以进行调试、工作 Sonarqube、工作语法突出显示、工作、linting。 我个人的印象是,虽然 vue.js 很棒,但如果你离开人迹罕至的地方,周围的环境还是有相当大的差距。

【讨论】:

  • 在我的情况下,cheap-module-eval-source-mapcheap-module-eval-source 工作得更好,在 devtools 中,我得到了 .vue 文件中的完整原始脚本,没有什么奇怪的。
猜你喜欢
  • 2016-04-02
  • 2018-07-25
  • 1970-01-01
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 2017-12-29
  • 2018-08-02
  • 2013-10-31
相关资源
最近更新 更多