我如何在使用babel和webpack时生成源代码Map?

daupos2t  于 2022-12-08  发布在  Babel
关注(0)|答案(6)|浏览(156)

我是webpack的新手,我需要一个帮手来设置生成源Map。我正在从命令行运行webpack serve,它编译成功了。但是我真的需要源Map。这是我的webpack.config.js

var webpack = require('webpack');

module.exports = {

  output: {
    filename: 'main.js',
    publicPath: '/assets/'
  },

  cache: true,
  debug: true,
  devtool: true,
  entry: [
      'webpack/hot/only-dev-server',
      './src/components/main.js'
  ],

  stats: {
    colors: true,
    reasons: true
  },

  resolve: {
    extensions: ['', '.js', '.jsx'],
    alias: {
      'styles': __dirname + '/src/styles',
      'mixins': __dirname + '/src/mixins',
      'components': __dirname + '/src/components/',
      'stores': __dirname + '/src/stores/',
      'actions': __dirname + '/src/actions/'
    }
  },
  module: {
    preLoaders: [{
      test: /\.(js|jsx)$/,
      exclude: /node_modules/,
      loader: 'jsxhint'
    }],
    loaders: [{
      test: /\.(js|jsx)$/,
      exclude: /node_modules/,
      loader: 'react-hot!babel-loader'
    }, {
      test: /\.sass/,
      loader: 'style-loader!css-loader!sass-loader?outputStyle=expanded&indentedSyntax'
    }, {
      test: /\.scss/,
      loader: 'style-loader!css!sass'
    }, {
      test: /\.(png|jpg|woff|woff2)$/,
      loader: 'url-loader?limit=8192'
    }]
  },

  plugins: [
    new webpack.HotModuleReplacementPlugin(),
    new webpack.NoErrorsPlugin()
  ]

};

我真的是新的webpack,并期待虽然文档并没有真正帮助,因为我不知道这个问题是具体的。

l7mqbcuq

l7mqbcuq1#

要使用源Map,应将devtool选项 valuetrue更改为this list中可用的 value,例如source-map

devtool: 'source-map'

devtool'source-map'-发出源Map。

x4shl7ld

x4shl7ld2#

也许其他人在某个时候也遇到了这个问题。如果你在webpack 2中使用UglifyJsPlugin,你需要显式地指定sourceMap标志。例如:

new webpack.optimize.UglifyJsPlugin({ sourceMap: true })
e4yzc0pl

e4yzc0pl3#

具有源Map的jsx的最小webpack配置:

var path = require('path');
var webpack = require('webpack');

module.exports = {
  entry: `./src/index.jsx` ,
  output: {
    path:  path.resolve(__dirname,"build"),
    filename: "bundle.js"
  },
  devtool: 'eval-source-map',
  module: {
    loaders: [
      {
        test: /.jsx?$/,
        loader: 'babel-loader',
        exclude: /node_modules/,
        query: {
          presets: ['es2015', 'react']
        }
      }
    ]
  },
};

运行它:

Jozsefs-MBP:react-webpack-babel joco$ webpack -d
Hash: c75d5fb365018ed3786b
Version: webpack 1.13.2
Time: 3826ms
        Asset     Size  Chunks             Chunk Names
    bundle.js   1.5 MB       0  [emitted]  main
bundle.js.map  1.72 MB       0  [emitted]  main
    + 221 hidden modules
Jozsefs-MBP:react-webpack-babel joco$
bejyjqdl

bejyjqdl4#

如果针对开发+生产进行优化,您可以在您的配置中尝试以下内容:

const dev = process.env.NODE_ENV !== 'production'

// in webpack.shared.config

{
  devtool: dev ? 'eval-cheap-module-source-map' : 'source-map', 
}

来自文档:

  • devtool:**“eval-cheap-module-source-map”**提供了只Map行(没有列Map)的SourceMap,速度要快得多
  • devtool:**“source-map”**无法缓存模块的源Map,需要为块重新生成完整的源Map。这是用于生产的东西。

另一个选择是在假定您不需要用于生产构建的源Map的情况下,为生产返回false。
我正在使用网络包2.1.0-beta.19

1mrurvl1

1mrurvl15#

在Webpack 2上,我尝试了所有12个devtool选项。以下选项链接到控制台中的原始文件并保留行号。请参见下面的注解:行。
https://webpack.js.org/configuration/devtool

devtool最佳开发选项

build   rebuild      quality                       look
eval-source-map                 slow    pretty fast  original source               worst
inline-source-map               slow    slow         original source               medium
cheap-module-eval-source-map    medium  fast         original source (lines only)  worst
inline-cheap-module-source-map  medium  pretty slow  original source (lines only)  best

仅限行

源Map被简化为每行一个Map。这通常意味着每个语句一个Map(假设您的作者是这样写的)。这会阻止您在语句级别调试执行以及在一行的列上设置断点。不能与最小化组合使用,因为最小化通常只发出一行。
重新审视
在一个大型项目中,我发现... eval-source-map重建时间约为3.5秒... inline-source-map重建时间约为7秒

8tntrjer

8tntrjer6#

即使是我遇到的同样的问题,在浏览器中它显示的是编译代码。我已经在webpack配置文件中做了下面的更改,它现在工作得很好。

devtool: '#inline-source-map',
 debug: true,

在装载机中,我将巴伯装载机作为首选

loaders: [
  {
    loader: "babel-loader",
    include: [path.resolve(__dirname, "src")]
  },
  { test: /\.js$/, exclude: [/app\/lib/, /node_modules/], loader: 'ng-annotate!babel' },
  { test: /\.html$/, loader: 'raw' },
  {
    test: /\.(jpe?g|png|gif|svg)$/i,
    loaders: [
      'file?hash=sha512&digest=hex&name=[hash].[ext]',
      'image-webpack?bypassOnDebug&optimizationLevel=7&interlaced=false'
    ]
  },
  {test: /\.less$/, loader: "style!css!less"},
  { test: /\.styl$/, loader: 'style!css!stylus' },
  { test: /\.css$/, loader: 'style!css' }
]

相关问题