Как создать исходные карты при использовании babel и webpack?
Я новичок в webpack, и мне нужна помощь в настройке для создания sourcemaps. Я бегу 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, и глядя, хотя документы действительно не помогли, поскольку я не уверен, что эта проблема специфична.
7 ответов:
может быть, у кого-то еще есть эта проблема в какой-то момент. Если вы используете
UglifyJsPlugininwebpack 2вы должны явно указатьsourceMapфлаг. Например:new webpack.optimize.UglifyJsPlugin({ sourceMap: true })
минимальная конфигурация 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$
если оптимизация для dev + production, вы можете попробовать что-то вроде этого в вашей конфигурации:
{ devtool: dev ? 'eval-cheap-module-source-map' : 'source-map', }
- devtool: "eval-cheap-module-source-map" предлагает исходные карты, которые отображают только линии (без сопоставления столбцов) и намного быстрее
- devtool: "источник-карту" не удается кэшировать исходные карты для модулей и необходимо восстановить полную исходную карту для куска. Это что-то для производства.
Я использую webpack 2.1.0-beta.19
на Webpack 2 я попробовал все 12 вариантов devtool. Следующие параметры ссылаются на исходный файл в консоли и сохраняют номера строк. См. Примечание ниже re: только строки.
https://webpack.js.org/configuration/devtool
devtool лучшие варианты 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строки только
исходные карты упрощаются до одного отображения на строку. Обычно это означает одно сопоставление для каждого оператора (предполагая, что вы автор таким образом). Это предотвращает отладку выполнения на уровне инструкции и от установки точек останова в Столбцах строки. Объединение с минимизацией невозможно, так как минимизаторы обычно выделяют только одну строку.
ВЕРНЕМСЯ К ЭТОМУ
на большом проекте я нахожу ... время восстановления eval-source-map составляет ~3,5 с... время восстановления inline-source-map составляет ~7s
даже та же проблема, с которой я столкнулся, в браузере он показывал скомпилированный код. Я сделал ниже изменения в файле конфигурации 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' } ]
вы можете попробовать рассвет, это проще
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вы можете завершить сборку
Comments