Как загрузить исходные файлы библиотеки с помощью webpack
Я создаю два проекта с помощью webpack; один - это библиотека для другого.
Можно ли использовать исходные карты из моего проекта библиотеки при создании моего проекта оболочки? Я хотел бы отлаживать свой библиотечный код из моего интерфейса оболочки.
Моя сборка работает правильно в том, что библиотека встроена. Единственная проблема - исходные файлы. JavaScript, который я вижу в отладчике браузера, очищен, поскольку исходные файлы недоступны.
Фрагмент моей структуры проекта:
+-- my-ui/
+-- dist/
+-- my-ui.js
+-- my-ui.js.map
+-- node_modules/
+-- my-lib/
+-- dist/
+-- bundle.js
+-- bundle.js.map
Фрагмент из webpack.config.js
:
module.exports = {
entry: './src/js/main.jsx',
output: {
path: path.join(__dirname, 'dist'),
filename: 'my-ui.js',
library: 'my-ui',
libraryTarget: 'umd'
},
devtool: 'source-map',
module: {
loaders: [
{test: /\.jsx?$/, loader: 'babel', include: path.join(__dirname, 'src')}
]
},
plugins: [
new Clean('dist'),
new HtmlWebpackPlugin({
template: 'src/index.html',
inject: true
})
]
};
Ответы
Ответ 1
Наконец-то я выяснил свою проблему...
Благодаря @BinaryMuse для чата на source-map-loader. Это действительно был правильный путь, хотя сначала он не работал у меня.
В конце концов я понял, что мне нужно включить source-map-loader
для webpack как в "my-lib" , так и "my-ui". Без source-map-loader
в конфигурации "my-lib" webpack, source-map-loader
внутри ошибок "my-ui" (с печальным сообщением), потому что он не может найти исходные карты для транзитивных зависимостей "my-lib" . По-видимому, исходные карты настолько хороши, что source-map-loader
способен заглянуть во все аспекты дерева зависимостей.
Также обратите внимание, что я столкнулся с проблемой, используя source-map-loader
в сочетании с react-hot-loader
. См., react-hot-loader
не содержит исходные карты. Когда source-map-loader
пытается найти их (потому что он просто сканирует все), он не может и прервать все.
В конечном счете, я бы хотел, чтобы source-map-loader
был более устойчивым к ошибкам, но при правильной настройке он работает!
devtool: 'source-map',
module: {
preLoaders: [
{test: /\.jsx?$/, loader: 'eslint', exclude: /node_modules/},
{test: /\.jsx?$/, loader: 'source-map', exclude: /react-hot-loader/}
],
loaders: [
{test: /\.jsx?$/, loader: 'raect-hot!babel', exclude: /node_modules/}
]
}
Ответ 2
Вы должны иметь возможность использовать любые параметры исходной карты eval, которые предоставляет Webpack.
Действительно, это всего лишь установка правильной опции devtool
в webpack.config.js
для проекта my-lib
.
devtool: 'eval',
eval
и eval-source-maps
должны работать.
Смотрите документацию по исходной карте Webpack для различных опций.