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

Ответ 1

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

devtool: 'source-map'

devtool: 'source-map' - Исправлена ​​Исходная Карта.

Ответ 2

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

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

Ответ 3

Минимальная конфигурация webpack для 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$

Ответ 4

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

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

Из документов:

  • devtool: "eval-cheap-module-source-map" предлагает SourceMaps, который отображает только строки (без сопоставлений столбцов) и намного быстрее
  • devtool: "исходная карта" не может кэшировать SourceMaps для модулей и необходимо восстановить полную SourceMap для куска. Это что-то для производства.

Я использую webpack 2.1.0-beta.19

Ответ 5

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

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

и в загрузчиках я сохранил загрузчик Babel в качестве первого варианта

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

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

https://webpack.js.org/configuration/devtool

devtool best dev options

                                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

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

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

Ответ 7

Вы можете попробовать рассвет, это проще

https://github.com/alibaba/dawn

Пример:

Установить

npm i dawn -g

Добавьте в проект .dawn.yml файл

build:
  - name: webpack
    output: ./dist
    entry: ./src/*.js
    template: ./assets/*.html
    sourceMap: true

Выполните следующую команду

dn build

Вы можете выполнить сборку