【问题标题】:Webpack AngularJS Sourcemaps issueWebpack AngularJS Sourcemaps 问题
【发布时间】:2018-04-26 08:32:45
【问题描述】:

很长一段时间以来,我一直在努力让我的源地图在我的应用中工作。我已经设置了

devtool:  'source-map',

在 webpack 配置中,但它们在 Chrome 开发工具中仍然不可用。

我使用我的 FE Stack 推送了一个非常简单的应用程序,希望有人能够识别问题,无论是 webpack、angular 还是其他一些库。 https://github.com/coreysnyder/Angular-Webpack3-Seed

这是我正在运行的版本:

{ 
  CoreyApp: '1.0.0',
  npm: '4.4.4',
  ares: '1.10.1-DEV',
  http_parser: '2.7.0',
  icu: '57.1',
  modules: '48',
  node: '6.9.0',
  openssl: '1.0.2j',
  uv: '1.9.1',
  v8: '5.1.281.84',
  zlib: '1.2.8' 
}
OSX 10.12.6

【问题讨论】:

  • 如果我将start-native 端口更改为 8080 之类的端口(因为它无法在我的电脑上启动)并运行npm installnpm run start-native 一切正常i.stack.imgur.com/fkfXN.png 我可以看到Chrome 开发工具中的源代码
  • 因此,如果您将调试器扔到 view1.js 控制器中,您会看到断点出现在 chrome devtools 中的 view1.js 中吗?我没有在控制台中找到代码,而是让它显示在控制器上。
  • 你可以试试devtool: 'cheap-module-source-map'选项吗?
  • 我已经尝试了所有选项。唉,没有任何一个有用的源映射进入开发工具。
  • 请列出您使用的操作系统?还有 node 和 npm 版本

标签: angularjs webpack webpack-dev-server source-maps


【解决方案1】:

您可能需要分别为不同的加载器设置源映射。

对于'ng-annotate-loader' (Docs)

use: [{
    loader: 'ng-annotate-loader',
    options: { 
        add: true, 
        single_quotes: true ,
        map: { inline: true, inFile: 'app.js', sourceRoot: __dirname + '/app' }}
}]

对于less,您可以使用documentation 选项,如@ahmedelgabri 建议

use: [{
    loader: "style-loader"
}, {
    loader: "css-loader", options: {
        sourceMap: true
    }
}, {
    loader: "less-loader", options: {
        sourceMap: true
    }
}]

OP github 更改之前的旧帖子。

如果您想使用devtool: 'source-map',其他选项是在您的output 中添加devtoolLineToLine: true。但是 devtoolLineToLine 已被弃用,因此请考虑将 devtool 更改为其他内容。 devtool: 'source-map' demo image

output: isTest ? {} : {
    devtoolLineToLine: true, // <= this line

    sourceMapFilename: '[name].map',
    path: __dirname + '/dist',
    filename: '[name].bundle.js',
    publicPath: publicPath
},

或者,您可以使用 devtool: 'eval' 或 eval 的某些变体,例如 cheap-module-eval-source-map(类似的行为,但没有文件名)also works fine for me

【讨论】:

  • 更接近,但仍然无法正常工作。我在view1.js?:19 上看到“View 1 Ctrl”而不是第 23 行。此外,我无法在同一文件第 27 行的doThing 函数中设置断点。我对 sourcemap 的期望是关闭了,还是它们无法正常工作。
  • @Corey 你在使用@scipper 回答中的babel-loader 吗?因为我对错误的行号有同样的问题。可能可以尝试来自here 的一些建议,或者在我的情况下,我只是没有loader: 'babel-loader' 部分并使用您的初始源代码
  • @Corey 如果是这种情况,我认为最简单的解决方案是使用 retainLines: true option { loader: 'babel-loader', options: { presets: ['@babel/preset-env'], retainLines: true } }
【解决方案2】:

我可以通过添加 babel-loader 来修复 JS 文件的源映射。为此,您需要安装 babel-loader:

npm i -D babel-loader@8.0.0-beta.0 @babel/core @babel/preset-env

然后为 .js 扩展你的规则

 rules: [
       {
         test: /\.js$/,
         exclude: /node_modules/,
         use: [
           {
             loader: 'ng-annotate-loader',
             options: { add: true, single_quotes: true }
           },
          {
            loader: 'babel-loader',
            options: {
              presets: ['@babel/preset-env']
            }
          }
         ]
       }, [...]
 ]

babel-loader github repo了解更多详情

【讨论】:

  • 当我使用它时,我没有看到任何变化。控制台日志“View 1 Ctrl”仍然显示为“app.js:19”而不是“view1.js:23”
  • 什么控制台日志?我错过了什么吗?
  • 啊好的。这很奇怪。我尝试对您的项目进行修复。
【解决方案3】:

这里的 Webpack 配置没有问题https://github.com/coreysnyder/Angular-Webpack3-Seed

这是一个使用您的代码并在 view1 文件中设置断点的 gif

这就是为什么文本是蓝色的

而且我可以很好地看到源代码

主要问题是 less-loader 您需要同时传递 less-loadercss-loader check the readme 的源映射选项

  {
    test: /\.less$/,
    use: [
      {
        loader: 'style-loader',
      },
      {
        loader: 'css-loader',
        options: {
          sourceMap: true,
        },
      },
      {
        loader: 'less-loader',
        options: {
          sourceMap: true,
        },
      },
    ],
  },

完成此操作后,您将能够像这样从样式面板进行调试

如果您想直接编辑 .less 文件,自述文件中提到了一篇博客文章,可以帮助您解决此问题 https://github.com/webpack-contrib/less-loader#source-maps

我希望这能回答你的问题

【讨论】:

  • 你把断点放在 webpack 生成的文件 view.html 中。我正在尝试通过源映射在源中放置断点。在生成的文件中放置断点没有帮助,因为控制器逻辑不是逐行分解的。
  • 当您看到蓝色的文本时,您再次看到的是编译后的代码,而不是源代码。唯一似乎工作的部分是您可以看到处于未编译状态的 stackOverflow 服务。这也是我试图为视图控制器实现的目标,但没有发生。
猜你喜欢
  • 2017-07-16
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 2017-05-29
相关资源
最近更新 更多