Как сгенерировать исходные карты при использовании babel и webpack?

Я новичок в 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, и просмотр документации мне не очень помог, так как я не уверен, для чего эта проблема характерна.


person Community    schedule 16.06.2015    source источник
comment
К вашему сведению, я не добавляю отладку для версии 2, я получил The 'debug' property was removed in webpack 2.   -  person shareef    schedule 08.05.2018
comment
Связанное сообщение - какая разница при использовании eval и eval-source-map?   -  person RBT    schedule 02.04.2019


Ответы (6)


Чтобы использовать исходную карту, вы должны изменить devtool параметр значение от true до значения, которое доступно в this list, например source-map

devtool: 'source-map'

devtool: 'source-map' - создается SourceMap.

person Oleksandr T.    schedule 28.06.2015
comment
Свойство denug было удалено в webpack 2. - person jnns; 06.02.2017
comment
@jnns Что его заменило? - person Brad; 12.05.2017
comment
Подтверждаю (webpack 3.5): devtool достаточно. Нет необходимости в каком-либо отладочном значении. - person Frank Nocke; 19.09.2017
comment
Просто хотел бы добавить, что если вы используете React, вы должны найти для него конкретную конфигурацию (create-response-app). - person dawn; 08.11.2019
comment
Куда он фактически выводит файл? - person Christian Findlay; 20.01.2020
comment
@MelbourneDeveloper, Обычно файл называется *.map, поэтому если ваш файл main.js, то карта источников называется main.js.map. Во время разработки с помощью webpack-dev-server, однако, файл исходной карты не создается в файловой системе, но он волшебным образом создается в памяти и отправляется в браузер с использованием технологии перезагрузки Hot Module. < / b> Надеюсь, это поможет. :-) - person PatS; 12.03.2020

Может быть, у кого-то еще есть эта проблема в какой-то момент. Если вы используете UglifyJsPlugin в webpack 2, вам необходимо явно указать флаг sourceMap. Например:

new webpack.optimize.UglifyJsPlugin({ sourceMap: true })
person Alex Moldovan    schedule 27.01.2017
comment
Мне также пришлось включить devtool: 'source-map', чтобы он работал - person Vic; 14.06.2017
comment
Мне пришлось включить это в опции загрузчика css и sass. - person d_rail; 03.08.2017

Минимальная конфигурация веб-пакета для jsx с исходными картами:

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$
person jhegedus    schedule 15.11.2016

При оптимизации для разработки и производства вы можете попробовать что-то вроде этого в своей конфигурации:

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

// in config

{
  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

person lfender6445    schedule 13.12.2016
comment
недавний довольно точный список производительности сборки + перестройки можно найти здесь, в официальной документации - person Frank Nocke; 19.09.2017
comment
Где / как устанавливается переменная dev? - person Chris; 10.06.2020
comment
в типичных случаях вы можете увидеть .env файлы, определенные или мутации в process.env. это всего лишь пример, но он может выглядеть так: const dev = process.env.development === true - person lfender6445; 11.06.2020

На Webpack 2 я перепробовал все 12 вариантов разработчика. Следующие параметры ссылаются на исходный файл в консоли и сохраняют номера строк. См. Примечание ниже, касающееся только строк.

https://webpack.js.org/configuration/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

только строки

Исходные карты упрощены до одного сопоставления на строку. Обычно это означает одно отображение для каждого оператора (при условии, что вы автор такой). Это предотвращает отладку выполнения на уровне оператора и установку точек останова в столбцах строки. Комбинирование с минимизацией невозможно, поскольку минимизаторы обычно выделяют только одну строку.

ПЕРЕСМОТРЕТЬ ЭТО

В большом проекте я нахожу ... время перестройки eval-source-map составляет ~ 3,5 с ... время перестройки встроенной исходной карты составляет ~ 7 с

person danday74    schedule 13.09.2017

Даже с той же проблемой, с которой я столкнулся, в браузере отображался скомпилированный код. Я внес следующие изменения в конфигурационный файл webpack, и теперь он работает нормально.

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

а в загрузчиках я оставил babel-loader как первый вариант

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' }
]
person Dijo    schedule 15.12.2016
comment
Свойство debug было удалено в webpack 2. - person jnns; 06.02.2017
comment
+1. Добавление опции include - вот что исправило это для меня. В webpack 2 это выглядит так: rules: [{loader: 'babel-loader', include: [path.resolve(__dirname, "src")] - person Matt Browne; 09.05.2017