Làm cách nào để tạo sourcemaps khi sử dụng babel và webpack?


328

Tôi mới sử dụng webpack và tôi cần một tay trong việc thiết lập để tạo ra các tài liệu. Tôi đang chạy webpack servetừ dòng lệnh, nó biên dịch thành công. Nhưng tôi thực sự cần đồ chua. Đây là của tôi 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()
  ]

};

Tôi thực sự mới đối với webpack và tìm kiếm mặc dù các tài liệu không thực sự hữu ích vì tôi không chắc vấn đề này cụ thể là gì.


FYI không thêm gỡ lỗi cho phiên bản 2, tôi đã nhậnThe 'debug' property was removed in webpack 2.
shareef

Câu trả lời:


435

Để bản đồ nguồn sử dụng, bạn nên thay đổi devtooltùy chọn giá trị từ trueđến giá trị mà có sẵn trong this list, ví dụsource-map

devtool: 'source-map'

devtool: 'source-map'- Một SourceMap được phát ra.


12
Tài denugsản đã bị xóa trong webpack 2.
jnns 6/2/2017

@jnns Cái gì đã thay thế nó?
Brad

6
Tôi có thể xác nhận (webpack 3.5): devtoollà đủ. Không cần bất kỳ giá trị gỡ lỗi.
Frank Nocke

Chỉ muốn nói thêm rằng nếu bạn đang sử dụng React, bạn nên tìm cấu hình cụ thể cho nó (tạo-Reac-app).
rạng sáng

Nó thực sự xuất tập tin đến đâu?
Nhà phát triển Melbourne

107

Có thể một người khác có vấn đề này tại một thời điểm. Nếu bạn sử dụng UglifyJsPlugintrong webpack 2bạn cần xác định rõ ràng sourceMapcờ. Ví dụ:

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

9
Tôi cũng phải bao gồm devtool: 'source-map'để nó hoạt động
Vic

1
Tôi đã phải bao gồm điều này trong các tùy chọn bộ tải css và sass.
d_rail

33

Cấu hình webpack tối thiểu cho jsx với 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']
        }
      }
    ]
  },
};

Chạy nó:

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

Nếu tối ưu hóa cho sản xuất dev + , bạn có thể thử một cái gì đó như thế này trong cấu hình của bạn:

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

Từ các tài liệu:

  • devtool: "eval-cheap-module-source-map" cung cấp SourceMaps chỉ ánh xạ các dòng (không có ánh xạ cột) và nhanh hơn nhiều
  • devtool: "source-map" không thể lưu trữ SourceMaps cho các mô-đun và cần tạo lại SourceMap hoàn chỉnh cho đoạn dữ liệu. Đó là một cái gì đó cho sản xuất.

Tôi đang sử dụng webpack 2.1.0-beta.19


2
gần đây, danh sách khá chính xác cho hiệu suất xây dựng + xây dựng lại có ở đây trong các tài liệu chính thức
Frank Nocke

devBiến ở đâu / như thế nào ?
Chris

trong trường hợp điển hình, bạn có thể thấy .envcác tệp được xác định hoặc đột biến process.env. đây chỉ là một ví dụ nhưng nó có thể trông như thế này:const dev = process.env.development === true
lfender6445

6

Trên Webpack 2 tôi đã thử tất cả 12 tùy chọn devtool. Các tùy chọn sau liên kết đến tệp gốc trong bảng điều khiển và giữ nguyên số dòng. Xem ghi chú bên dưới re: chỉ dòng.

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

tùy chọn dev tốt nhất 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

chỉ dòng

Bản đồ nguồn được đơn giản hóa thành một ánh xạ duy nhất trên mỗi dòng. Điều này thường có nghĩa là một ánh xạ duy nhất cho mỗi câu lệnh (giả sử bạn là tác giả theo cách này). Điều này ngăn bạn gỡ lỗi thực thi ở mức câu lệnh và từ các điểm dừng cài đặt trên các cột của một dòng. Kết hợp với giảm thiểu là không thể vì tối thiểu hóa thường chỉ phát ra một dòng duy nhất.

SỬA ĐỔI NÀY

Trong một dự án lớn, tôi thấy ... thời gian xây dựng lại bản đồ nguồn là ~ 3,5 giây ... thời gian xây dựng lại bản đồ nguồn-nguồn là ~ 7 giây


3

Ngay cả vấn đề tương tự tôi gặp phải, trong trình duyệt nó đang hiển thị mã được biên dịch. Tôi đã thực hiện các thay đổi bên dưới trong tệp cấu hình webpack và hiện tại nó đang hoạt động tốt.

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

và trong các trình tải, tôi giữ babel-loader là tùy chọn đầu tiên

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
Tài debugsản đã bị xóa trong webpack 2.
jnns 6/2/2017

+1. Thêm includetùy chọn là những gì cố định nó cho tôi. Trong webpack 2, nó trông như thế này:rules: [{loader: 'babel-loader', include: [path.resolve(__dirname, "src")]
Matt Browne
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.