Bevor ich mich dazu entschloss, diese Ausgabe zu veröffentlichen, habe ich einige Dinge als Hintergrundüberprüfung durchgeführt ... Das ist mein Problem:
- Ich verwende webpack v4.6.0 und webpack-dev-server v3.1.3 - sie funktionieren gut zusammen, aber jetzt versuche ich, Quellkarten für meine Anwendung einzurichten. Es scheint, dass devtool option funktioniert nicht.
Zumindest für mich habe ich jede Option aus der Liste ausprobiert und getestet:
devtool: 'source-map'
sofort funktionieren sollte. Dies ist jedoch bei mir nicht der FalldevtoolModuleFilenameTemplate: info =>'file://' + path.resolve(info.absoluteResourcePath).replace(/\\/g, '/')
zu meiner Ausgabekonfiguration hat nicht viel geholfen. Statt client.js wird jedoch index.js für mich angezeigt. webpack.SourceMapDevToolPlugin
zu verwenden, aber es funktioniert auch nicht mit meinem Setup, auch wenn ich devtools lösche oder auf false setzeWissen Sie, ob dieses Problem von einer PR behoben wird oder haben Sie versucht, es selbst zu lösen? Irgendwelche Tipps oder Hilfe wird geschätzt!
Ich möchte die Ausgabe wie hier beschrieben erhalten, in blogpost mit direkten Links zu meinen Dateien und dem ursprünglichen Dateicode.
Meine webpack.js
// webpack v4.6.0
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const WebpackMd5Hash = require('webpack-md5-hash');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const stylish = require('eslint/lib/formatters/stylish');
const webpack = require('webpack');
module.exports = {
entry: { main: './src/index.js' },
output: {
devtoolModuleFilenameTemplate: info =>
'file://' + path.resolve(info.absoluteResourcePath).replace(/\\/g, '/'),
path: path.resolve(__dirname, 'dist'),
filename: '[name].[hash].js'
},
devtool: 'source-map',
devServer: {
contentBase: './dist',
hot: true
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader'
},
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'eslint-loader',
options: {
formatter: stylish
}
}
]
},
plugins: [
// new webpack.SourceMapDevToolPlugin({
// filename: '[file].map',
// moduleFilenameTemplate: undefined,
// fallbackModuleFilenameTemplate: undefined,
// append: null,
// module: true,
// columns: true,
// lineToLine: false,
// noSources: false,
// namespace: ''
// }),
new CleanWebpackPlugin('dist', {}),
new HtmlWebpackPlugin({
inject: false,
hash: true,
template: './src/index.html',
filename: 'index.html'
}),
new WebpackMd5Hash(),
new webpack.NamedModulesPlugin(),
new webpack.HotModuleReplacementPlugin()
]
};
mein package.json
{
"name": "post",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"storybook": "start-storybook -p 9001 -c .storybook",
"dev": "webpack-dev-server --mode development --open",
"build": "webpack --mode production"
},
"author": "",
"license": "ISC",
"devDependencies": {
"@storybook/addon-actions": "^3.4.3",
"@storybook/react": "v4.0.0-alpha.4",
"babel-cli": "^6.26.0",
"babel-core": "^6.26.0",
"babel-loader": "^7.1.4",
"babel-preset-env": "^1.6.1",
"babel-preset-react": "^6.24.1",
"babel-runtime": "^6.26.0",
"clean-webpack-plugin": "^0.1.19",
"eslint": "^4.19.1",
"eslint-config-prettier": "^2.9.0",
"eslint-loader": "^2.0.0",
"eslint-plugin-prettier": "^2.6.0",
"eslint-plugin-react": "^7.7.0",
"html-webpack-plugin": "^3.2.0",
"prettier": "^1.12.1",
"react": "^16.3.2",
"react-dom": "^16.3.2",
"webpack": "v4.6.0",
"webpack-cli": "^2.0.13",
"webpack-dev-server": "v3.1.3",
"webpack-md5-hash": "0.0.6",
"webpack-serve": "^0.3.1"
},
"dependencies": {
"source-map-support": "^0.5.5"
}
}
meine Ausgabe in der Konsole ist:
Bearbeiten:
Ich habe eine ähnliche Frage hier gesehen, aber niemand scheint zu antworten .Der Fehler wurde absichtlich gemacht! .__ Dies gilt nicht nur für Linting-Fehler, sondern für jeden Fehler meiner App .Hier ist ein Link zu meinem GITHUB-Repo: https://github.com/marharyta/ webpack-fast-development
UPDATE 01.05.2018
Ich habe ein weiteres Repo mit Cleaner-Setup erstellt: https://github.com/marharyta/webpack-4.6.0-test Und eine detaillierte Erklärung, wie ich hierher gekommen bin: https: // medium .com/p/79fb676417f4/edit Einige Vorschläge wurden von den Webpack-Mitwirkenden gemacht, was aber immer noch nicht funktioniert hat: https://github.com/marharyta/webpack-4.6.0-test/ Ausgaben/1
UPDATE 02.05.2018
Nach einer langen Untersuchung habe ich meine Antwort hier veröffentlicht. Das Problem war ESLint und wahrscheinlich einige Modusmarkierungen, da ich es auf die CLI-Art tun musste. Ich habe auch ein Problem mit ESLint Loader hier: https://github.com/webpack-contrib/eslint-loader/issues/227 Ich habe hier auch einen Beitrag mit einer detaillierteren Beschreibung erstellt: https://medium.com/@riittagirl/how-to-solve-webpack-problems-the-practical-case-79fb676417f4
Nach langem Ausprobieren bekam ich schließlich Hilfe von einem der Webpack-Verantwortlichen. Das Hauptproblem war eslint. Wenn Sie es als Loader laden, führt dies zu unerwartetem Verhalten. Durch Löschen des eslint aus den Webpack-Ladern für js können Sie dies beheben.
Das Webpack-Setup vor:
// webpack v4
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const WebpackMd5Hash = require('webpack-md5-hash');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const baseConfig = {
entry: { main: './src/index.js' },
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name].[hash].js'
},
devServer: {
contentBase: './dist',
hot: true,
open: true
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
**use: [
{ loader: 'babel-loader' },
{
loader: 'eslint-loader',
options: { formatter: require('eslint/lib/formatters/stylish') }
}**
]
}
]
},
plugins: [
new CleanWebpackPlugin('dist'),
new HtmlWebpackPlugin({
inject: false,
hash: true,
template: './src/index.html',
filename: 'index.html'
}),
new WebpackMd5Hash()
]
};
if (process.env.NODE_ENV === 'development') {
baseConfig.devtool = 'inline-source-map';
}
module.exports = baseConfig
das webpack, das funktioniert nach:
// webpack v4
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const WebpackMd5Hash = require('webpack-md5-hash');
const CleanWebpackPlugin = require('clean-webpack-plugin');
module.exports = {
entry: { main: './src/index.js' },
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name].[hash].js'
},
devtool: 'cheap-module-source-map',
devServer: {
contentBase: './dist',
hot: true,
open: true
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
**use: [{ loader: 'babel-loader' }]**
}
]
},
plugins: [
new CleanWebpackPlugin('dist'),
new HtmlWebpackPlugin({
inject: false,
hash: true,
template: './src/index.html',
filename: 'index.html'
}),
new WebpackMd5Hash()
]
};
mein packeje.json sieht so aus:
{
"name": "post",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"build": "webpack --mode=production",
"start": "NODE_ENV=development webpack-dev-server --mode=development --hot"
},
"author": "",
"license": "ISC",
"devDependencies": {
"babel-cli": "^6.26.0",
"babel-core": "^6.26.0",
"babel-loader": "^7.1.4",
"babel-preset-env": "^1.6.1",
"babel-preset-react": "^6.24.1",
"babel-runtime": "^6.26.0",
"clean-webpack-plugin": "^0.1.19",
"eslint": "^4.19.1",
"eslint-config-prettier": "^2.9.0",
"eslint-loader": "^2.0.0",
"eslint-plugin-prettier": "^2.6.0",
"eslint-plugin-react": "^7.7.0",
"html-webpack-plugin": "^3.2.0",
"prettier": "^1.12.1",
"react": "^16.3.2",
"react-dom": "^16.3.2",
"webpack": "^4.6.0",
"webpack-cli": "^2.0.13",
"webpack-md5-hash": "0.0.6"
},
"dependencies": {
"webpack-dev-server": "^3.1.3"
}
}
Siehe auch die Vorschläge aus dem Problem, das in meiner Zweigstelle erstellt wurde: https://github.com/marharyta/webpack-4.6.0-test
In webpack4 müssen Sie den Modus in Ihrer Webpack-Konfiguration einstellen. Bitte hinzufügen
mode: "development"
Zu deiner Webpack-Konfig.
Sie können NamedModulesPlugin entfernen, da es bereits im Dev-Modus verwendet wird.
Die Option source-map
ist für Produktions-Builds gedacht. Für Ihren Dev-Build würde ich die devtool-Komponente entfernen, da webpack eval
als Standardwert verwendet. Wenn dies nicht funktionieren sollte, versuchen Sie Folgendes:
devtool: 'eval-cheap-module-source-map'
Das ist was ich benutze. Minimalste Konfig.
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const stylish = require('eslint/lib/formatters/stylish');
const webpack = require('webpack');
module.exports = {
mode: 'development',
entry: { main: './src/index.js' },
output: {
filename: '[name].[hash].js'
},
resolve: {
extensions: ['.js', '.jsx']
},
devtool: 'eval-cheap-module-source-map',
devServer: {
hot: true,
open: true
},
module: {
rules: [
{
test: /\.jsx?$/,
exclude: /node_modules/,
use: [
{ loader: 'babel-loader' },
{ loader: 'eslint-loader', options: { formatter: stylish } }
]
}
]
},
plugins: [
new CleanWebpackPlugin('dist'),
new HtmlWebpackPlugin({
template: './src/index.html'
}),
new webpack.HotModuleReplacementPlugin()
]
};