babelとwebpackを使用しているときにソースマップを生成するにはどうすればよいですか?


328

私はwebpackを初めて使用するので、ソースマップを生成するための設定が必要です。webpack serveコマンドラインから実行していますが、正常にコンパイルされます。しかし、本当にソースマップが必要です。これは私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を初めて使用するので、この問題が何に固有なのかわからないので、ドキュメントはあまり役に立ちませんでした。


バージョン2のためのFYIいけない追加のデバッグ、私が得たThe 'debug' property was removed in webpack 2.
SHAREEF

回答:


435

使用ソースマップするためには、変更する必要がありdevtool、オプション値をからtrue価値で利用できるthis list例えば、source-map

devtool: 'source-map'

devtool'source-map'-SourceMapが発行されます。


12
denugプロパティはWebPACKの2で削除されました
jnns

@jnns何がそれを置き換えましたか?
ブラッド

6
確認できます(webpack 3.5):devtool十分です。デバッグ値は必要ありません。
フランクノッケ2017

Reactを使用している場合は、その特定の構成(create-react-app)を見つける必要があります。

実際にはどこにファイルを出力しますか?
メルボルンデベロッパー

107

たぶん誰かがこの問題を抱えているかもしれません。UglifyJsPluginin を使用する場合はwebpack 2sourceMapフラグを明示的に指定する必要があります。例えば:

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

9
それが機能するように含める必要もありdevtool: 'source-map'ました
Vic

1
これをcssおよびsassローダーオプションに含める必要がありました。
d_rail 2017

33

ソースマップ付きの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$

15

dev + production向けに最適化する場合、設定で次のようなことを試すことができます:

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

ドキュメントから:

  • devtool:"eval-cheap-module-source-map"は、行のみをマップし(列マッピングはなし)、はるかに高速なSourceMapsを提供します
  • devtool:「source-map」はモジュールのSourceMapをキャッシュできず、チャンクの完全なSourceMapを再生成する必要があります。それは生産のためのものです。

私はwebpack 2.1.0-beta.19を使用しています


2
ビルドと再ビルドのパフォーマンスに関する最近のかなり正確な
リスト

どこで/どのようにdev変数が設定されますか?
クリス

典型的なケースでは、.env定義されたファイルまたはへの変更が表示されることがありますprocess.env。これは一例ですが、それは次のようになりますconst dev = process.env.development === true
lfender6445

6

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

行のみ

ソースマップは、1行に1つのマッピングに簡略化されています。これは通常、ステートメントごとに単一のマッピングを意味します(作成者がこのようになっていると想定)。これにより、ステートメントレベルで実行をデバッグしたり、行の列にブレークポイントを設定したりできなくなります。最小化機能は通常1行しか出力しないため、最小化と組み合わせることはできません。

これを再検討する

大規模なプロジェクトで、... eval-source-mapの再構築時間は〜3.5秒です... inline-source-mapの再構築時間は〜7秒です


3

私が直面した同じ問題でも、ブラウザーではコンパイルされたコードが表示されていました。以下の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' }
]

6
debugプロパティは、WebPACKの2で削除されました
jnns

+1。includeオプションを追加すると、それが修正されます。:WebPACKの2で、それはこのようになりますrules: [{loader: 'babel-loader', include: [path.resolve(__dirname, "src")]
マット・ブラウン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.