Webpack 4 devtool 选项不适用于 webpack-dev-server

2023-12-31

在我决定发布这个问题之前,我做了很多事情作为背景调查。 所以,我的问题是:

- 我使用 webpack v4.6.0 和 webpack-dev-server v3.1.3 - 他们一起工作得很好,但现在我正在尝试为我的应用程序设置源映射,似乎开发工具选项 https://webpack.js.org/configuration/devtool/不起作用。

至少对我来说,我已经尝试并测试了列表中的每个选项:

  • Webpack 4 - 源映射 https://stackoverflow.com/questions/48986641/webpack-4-sourcemaps: 这个问题表明devtool: 'source-map'应该开箱即用,但对我来说情况并非如此
  • how to make webpack sourcemap to original files https://stackoverflow.com/questions/34185748/how-to-make-webpack-sourcemap-to-original-files : adding devtoolModuleFilenameTemplate: info =>'file://' + path.resolve(info.absoluteResourcePath).replace(/\\/g, '/') to my output config did not help much, instead of client.js it shows index.js for me thoughenter image description hereenter image description here
  • https://github.com/webpack/webpack/issues/6400 https://github.com/webpack/webpack/issues/6400:这不是对我的问题的准确描述,尝试这里的方法似乎也没有帮助我
  • 我尝试使用webpack.SourceMapDevToolPlugin但它也不适用于我的设置,即使我删除开发工具或将它们设置为 false
  • 我这里不使用 UglifyJS 插件
  • 我知道 webpack-dev-server 现在正在维护中,所以我尝试了 webpack-serve,但似乎源映射也不适用于它
  • I have tried source-map-support package as well, but no luck either, have a similar situation as here https://github.com/webpack/webpack/issues/3165: enter image description here

您知道这个问题是否会通过一些公关来解决,或者您是否尝试过自己解决?任何提示或帮助表示赞赏!

我想获得此处描述的输出,在博客文章中 http://erikaybar.name/webpack-source-maps-in-chrome/直接链接到我的文件和原始文件代码。

我的 webpack.js

// webpack v4.6.0
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const WebpackMd5Hash = require('webpack-md5-hash');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const stylish = require('eslint/lib/formatters/stylish');
const webpack = require('webpack');

module.exports = {
  entry: { main: './src/index.js' },
  output: {
    devtoolModuleFilenameTemplate: info =>
      'file://' + path.resolve(info.absoluteResourcePath).replace(/\\/g, '/'),
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].[hash].js'
  },
  devtool: 'source-map',
  devServer: {
    contentBase: './dist',
    hot: true
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader'
      },
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'eslint-loader',
        options: {
          formatter: stylish
        }
      }
    ]
  },
  plugins: [
    // new webpack.SourceMapDevToolPlugin({
    //   filename: '[file].map',
    //   moduleFilenameTemplate: undefined,
    //   fallbackModuleFilenameTemplate: undefined,
    //   append: null,
    //   module: true,
    //   columns: true,
    //   lineToLine: false,
    //   noSources: false,
    //   namespace: ''
    // }),
    new CleanWebpackPlugin('dist', {}),
    new HtmlWebpackPlugin({
      inject: false,
      hash: true,
      template: './src/index.html',
      filename: 'index.html'
    }),
    new WebpackMd5Hash(),
    new webpack.NamedModulesPlugin(),
    new webpack.HotModuleReplacementPlugin()
  ]
};

我的包.json

{
  "name": "post",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "storybook": "start-storybook -p 9001 -c .storybook",
    "dev": "webpack-dev-server --mode development --open",
    "build": "webpack --mode production"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@storybook/addon-actions": "^3.4.3",
    "@storybook/react": "v4.0.0-alpha.4",
    "babel-cli": "^6.26.0",
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.4",
    "babel-preset-env": "^1.6.1",
    "babel-preset-react": "^6.24.1",
    "babel-runtime": "^6.26.0",
    "clean-webpack-plugin": "^0.1.19",
    "eslint": "^4.19.1",
    "eslint-config-prettier": "^2.9.0",
    "eslint-loader": "^2.0.0",
    "eslint-plugin-prettier": "^2.6.0",
    "eslint-plugin-react": "^7.7.0",
    "html-webpack-plugin": "^3.2.0",
    "prettier": "^1.12.1",
    "react": "^16.3.2",
    "react-dom": "^16.3.2",
    "webpack": "v4.6.0",
    "webpack-cli": "^2.0.13",
    "webpack-dev-server": "v3.1.3",
    "webpack-md5-hash": "0.0.6",
    "webpack-serve": "^0.3.1"
  },
  "dependencies": {
    "source-map-support": "^0.5.5"
  }
}

my output in console is: enter image description here

Edit:

我看到一个类似的问题here https://stackoverflow.com/questions/49477274/webpack-4-2-how-can-i-obtain-the-original-source-file-name-and-line-line-numbe,但似乎没有人回答。这个错误是故意的!这不仅适用于 linting 错误,还适用于我的应用程序的每个错误。这是我的 GITHUB 存储库的链接:https://github.com/marharyta/webpack-fast-development https://github.com/marharyta/webpack-fast-development

更新 01.05.2018

我创建了另一个具有更清晰设置的存储库:https://github.com/marharyta/webpack-4.6.0-test https://github.com/marharyta/webpack-4.6.0-test以及我如何到达这里的详细解释:https://medium.com/p/79fb676417f4/edit https://medium.com/p/79fb676417f4/editwebpack 贡献者给出了一些建议,但对我来说仍然不起作用:https://github.com/marharyta/webpack-4.6.0-test/issues/1 https://github.com/marharyta/webpack-4.6.0-test/issues/1

更新 02.05.2018

经过长时间的调查,我在下面发布了我的答案。问题是 ESLint 和可能是一些模式标记,因为我必须使用 CLI 方式来完成。 我在这里也遇到了 ESLint 加载器的问题:https://github.com/webpack-contrib/eslint-loader/issues/227 https://github.com/webpack-contrib/eslint-loader/issues/227我还在这里创建了一篇包含更详细描述的帖子:https://medium.com/@riittagirl/how-to-solve-webpack-problems-the-practical-case-79fb676417f4 https://medium.com/@riittagirl/how-to-solve-webpack-problems-the-practical-case-79fb676417f4


因此,经过长时间的尝试和错误,我终于得到了一位 webpack 维护者的帮助。 主要问题是 eslint。如果将其作为加载程序加载,则会产生意外的行为。 通过从 js 的 webpack 加载器中删除 eslint 可以解决这个问题。

之前的webpack设置:

// webpack v4
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const WebpackMd5Hash = require('webpack-md5-hash');
const CleanWebpackPlugin = require('clean-webpack-plugin');

const baseConfig = {
  entry: { main: './src/index.js' },
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].[hash].js'
  },
  devServer: {
    contentBase: './dist',
    hot: true,
    open: true
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        **use: [
          { loader: 'babel-loader' },
          {
            loader: 'eslint-loader',
            options: { formatter: require('eslint/lib/formatters/stylish') }
          }**
        ]
      }
    ]
  },
  plugins: [
    new CleanWebpackPlugin('dist'),
    new HtmlWebpackPlugin({
      inject: false,
      hash: true,
      template: './src/index.html',
      filename: 'index.html'
    }),
    new WebpackMd5Hash()
  ]
};

if (process.env.NODE_ENV === 'development') {
  baseConfig.devtool = 'inline-source-map';
}

module.exports = baseConfig

之后运行的 webpack:

// webpack v4
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const WebpackMd5Hash = require('webpack-md5-hash');
const CleanWebpackPlugin = require('clean-webpack-plugin');
module.exports = {
  entry: { main: './src/index.js' },
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].[hash].js'
  },
  devtool: 'cheap-module-source-map',
  devServer: {
    contentBase: './dist',
    hot: true,
    open: true
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        **use: [{ loader: 'babel-loader' }]**
      }
    ]
  },
  plugins: [
    new CleanWebpackPlugin('dist'),
    new HtmlWebpackPlugin({
      inject: false,
      hash: true,
      template: './src/index.html',
      filename: 'index.html'
    }),
    new WebpackMd5Hash()
  ]
};

我的 packeje.json 看起来像:

{
  "name": "post",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "webpack --mode=production",
    "start": "NODE_ENV=development webpack-dev-server --mode=development --hot"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "babel-cli": "^6.26.0",
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.4",
    "babel-preset-env": "^1.6.1",
    "babel-preset-react": "^6.24.1",
    "babel-runtime": "^6.26.0",
    "clean-webpack-plugin": "^0.1.19",
    "eslint": "^4.19.1",
    "eslint-config-prettier": "^2.9.0",
    "eslint-loader": "^2.0.0",
    "eslint-plugin-prettier": "^2.6.0",
    "eslint-plugin-react": "^7.7.0",
    "html-webpack-plugin": "^3.2.0",
    "prettier": "^1.12.1",
    "react": "^16.3.2",
    "react-dom": "^16.3.2",
    "webpack": "^4.6.0",
    "webpack-cli": "^2.0.13",
    "webpack-md5-hash": "0.0.6"
  },
  "dependencies": {
    "webpack-dev-server": "^3.1.3"
  }
}

另请参阅在我的分支上创建的问题的建议:https://github.com/marharyta/webpack-4.6.0-test https://github.com/marharyta/webpack-4.6.0-test

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Webpack 4 devtool 选项不适用于 webpack-dev-server 的相关文章

随机推荐

  • 如何在 Google Sheets 中使用 .gs 脚本打印工作表/范围?

    我正在尝试在 Google Sheets 中创建一个脚本来选择一个范围并打印它 我正在尝试根据一些参数打印一些信息 我有以下脚本来设置所需的范围 但我没有找到使用脚本打印它的方法 function printInvoice var ss S
  • date -d 在 Mac 上不起作用

    我正在尝试将时间戳转换为秒数 但它在 Mac 上无法按预期工作 在linux上我可以运行 date d 2015 06 11 12 39 s我得到1434044340如预期 然而 当我在 Mac 上运行相同的命令时 我得到 usage da
  • 处理 parsedatetime 的不同结果

    在过去 15 年左右的时间里 我只偶尔使用 Perl 工作 现在我正在尝试学习 Python 我无法理解如何处理来自 parsedatetime 的 Calendar parse 的解析方法的两种不同类型的结果 鉴于这个脚本 usr bin
  • 如何强制eclipse使用指定的界面语言?

    我的新工作笔记本电脑设置了我的本地 波兰 语言环境 但是 我根本无法以英语以外的任何语言使用 eclipse 我太习惯英文名字了 所以不明白翻译 如何强制 Eclipse 以操作系统使用的其他语言启动 好 我知道了 eclipse ini
  • 通过 TCP 代理的 RDP

    第一次使用 Stackoverflow 希望有人能帮助我 我正在研究通过 TCP 代理 隧道传递 RDP 流量的概念证明 该代理 隧道将使用 HTTPS 通过防火墙 该问题与将映像部署到计算机有关 因此不能假设 NET 框架将存在 因此在连
  • 将 Grunt 应用程序部署到 heroku 时,NPM 不会安装模块依赖项

    我使用 grunt 制作了一个静态单页网站 我现在尝试使用以下命令将其部署到 herokuheroku buildpack nodejs grunt https github com mbuchetics heroku buildpack
  • 已 root 的 Galaxy S8 上的设备所有者

    我一直在尝试将我的内部演示应用程序提升为设备所有者rootedS8 一直有问题 我尝试过的方法 1 NFC 配置 如所解释的here https github com googlesamples android NfcProvisionin
  • 如何使用应用密码访问bitbucket

    我已经按照说明创建了应用程序密码here https confluence atlassian com bitbucket app passwords 828781300 html 但现在 我如何使用此应用程序密码访问存储库 网址是什么 有
  • 使用 C 无法从 TCP 套接字正确接收数据 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我使用的是 Ubuntu 12 04
  • 如果字符串出现在源(或差异)中,Git 在提交之前发出警告

    当我在某个场所进行表演时 我希望能够被阻止 git如果我要提交的更改包含某个字符串 例如 todo or hack 有人可以告诉我如何实现这一目标吗 或警告 或在提交时 一个简单的预提交钩子检查是否添加了字符串 todo 如下所示 bin
  • Chrome 扩展和 Javasctipy 数据库

    我正在尝试构建一个 Chrome 扩展程序 该扩展程序将大量使用数据和图像 在存储数据时我有哪些选择 我希望我有某种 SQL 选项 SQLite 你可以去base64 http en wikipedia org wiki Base64编码图
  • 在后台打开新标签页?

    使用 javascript 我想在不同的选项卡中打开一个新页面 但仍将注意力集中在当前选项卡上 我知道我可以这样做 open http example com focus 但是 当我在 Chrome 中执行此操作时 它会在切换回当前选项卡之
  • 无法以编程方式更改 UITextView 框架大小

    我已使用界面生成器在视图中插入 UITextView 现在我想更改其框架大小 以便以编程方式适合内容 问题在于 由于限制 大小似乎被锁定并且无法从代码中更改 如果我在文件检查器中禁用自动布局 每个对象都会删除约束 但我只想更改 UIText
  • “UnicodeEncodeError:‘ascii’编解码器无法对字符进行编码”

    我试图通过正则表达式传递大的随机 html 字符串 而我的 Python 2 6 脚本对此感到窒息 UnicodeEncodeError ascii 编解码器无法对字符进行编码 我追溯到这个词末尾的商标上标 Protection 我希望将来
  • 如何交互 BlazorWebView 和 Windows 窗体

    我想将数据从 Windows 窗体发送到 BlazorWebView 并接收从 Web 视图返回到窗体的通知 这个怎么做 在 Net 6 Windows 窗体应用程序中 BlazorWebView blazorApp new BlazorW
  • iPhone 中用于 AES 加密的不同填充模式和密码模式有哪些?

    iPhone 中用于 AES 加密的不同填充模式和密码模式有哪些 Thanks 有两种填充模式 PKCS 7 和无 以及两种相应的密码模式 CBC 和 ECB 如果您指定kCCOptionPKCS7Padding然后你会得到 CBC 并且如
  • 如何在 MySQL 中使用准备好的语句截断表?

    这返回 true 但它没有截断表 this gt db gt query TRUNCATE TABLE tablename 但它在为准备好的语句创建数据库连接对象之前起作用 如何修复它 另外 我想知道如何使用准备好的语句截断表 NO 准备好
  • djangorest框架创建带有密码的用户

    使用 django rest framework 3 和 django 1 8 我正在尝试使用 django rest framework ModelViewSerializer 创建用户 问题是DRF使用的默认objects create
  • 如何在 PostgreSQL 中对使用 date_trunc 函数的表达式创建索引?

    当我尝试在 PostgreSQL 中对类型的表字段的表达式创建索引时date 使用date trunc函数 我收到以下错误 functions in index expression must be marked IMMUTABLE 我该如
  • Webpack 4 devtool 选项不适用于 webpack-dev-server

    在我决定发布这个问题之前 我做了很多事情作为背景调查 所以 我的问题是 我使用 webpack v4 6 0 和 webpack dev server v3 1 3 他们一起工作得很好 但现在我正在尝试为我的应用程序设置源映射 似乎开发工具