Comment générer des sourcemaps lors de l'utilisation de babel et webpack?

Je suis nouveau sur webpack, et j'ai besoin d'un coup de main dans la configuration pour générer des sourcemaps. J'exécute webpack serve à partir de la ligne de commande, qui compile avec succès. Mais j'ai vraiment besoin de sourcemaps. C'est mon 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()
  ]

};

Je suis vraiment nouveau sur webpack, et en regardant bien que les docs n'aient pas vraiment aidé car je ne suis pas sûr de ce à quoi ce problème est spécifique.

254
demandé sur Damjan Pavlica 2015-06-16 17:41:42

7 réponses

Pour utiliser la carte, vous devez la changer devtool option valeur à partir de true de la valeur, qui disponible en this list, par exemple source-map

devtool: 'source-map'

devtool: 'source-map' - Une carte source est émise.

336
répondu Alexander T. 2018-01-19 16:14:22

Peut-être que quelqu'un d'autre a ce problème à un moment. Si vous utilisez UglifyJsPlugin dans webpack 2 vous devez spécifier explicitement le sourceMap drapeau. Par exemple:

new webpack.optimize.UglifyJsPlugin({ sourceMap: true })
88
répondu Alex Moldovan 2017-05-04 19:50:29

Configuration minimale du pack Web pour jsx avec sourcemaps:

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']
        }
      }
    ]
  },
};

L'Exécuter:

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$
27
répondu jhegedus 2016-11-15 09:27:02

Si vous optimisez pour dev + production , vous pouvez essayer quelque chose comme ceci dans votre configuration:

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

À partir des documents:

  • devtool: "eval-cheap-module-source-map" propose des cartes source qui ne mappent que des lignes (pas de mappages de colonnes) et sont beaucoup plus rapides
  • devtool: "source-map" impossible de mettre en cache les cartes de source pour les modules et besoin de régénérer la carte de source complète pour le bloc. C'est quelque chose pour la production.

J'utilise webpack 2.1.0-bêta.19

12
répondu lfender6445 2018-02-15 15:14:52

Sur Webpack 2 j'ai essayé toutes les 12 options devtool. Les options suivantes lient au fichier d'origine dans la console et préservent les numéros de ligne. Voir la note ci-dessous concernant les lignes seulement.

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

Devtool meilleures options de dev

                                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

Lignes seulement

Les mappages sources sont simplifiés en un seul mappage par ligne. Cela signifie généralement un seul mappage par instruction (en supposant que votre auteur est de cette façon). Cela vous évite à partir de l'exécution du débogage au niveau de l'instruction et des paramètres des points d'arrêt sur les colonnes d'une ligne. La combinaison avec la minimisation n'est pas possible car les minimiseurs n'émettent généralement qu'une seule ligne.

REVISITER CE

Sur un grand projet que je trouve ... eval-source-map temps de reconstruction est ~3.5 S... le temps de reconstruction inline-source-map est ~7s

4
répondu danday74 2018-01-30 12:26:01

Même le même problème que j'ai rencontré, dans le navigateur, il montrait du code compilé. J'ai fait ci-dessous des changements dans le fichier de configuration webpack et cela fonctionne bien maintenant.

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

Et dans les chargeurs, j'ai gardé babel-loader comme première option

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' }
]
3
répondu Dijo 2016-12-15 03:50:40

Vous pouvez essayer Dawn, c'est plus simple

Https://github.com/alibaba/dawn

Exemple:

Installer

npm i dawn -g

Ajoutez un fichier .dawn.yml à votre projet

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

Exécutez la commande suivante

dn build

Vous pouvez compléter la construction

-6
répondu Houfeng 2017-09-07 02:31:28