我对 webpack 还很陌生,在配置它来生成必要的源映射时遇到了一些麻烦。在开发工具中它说
检测到源地图
但它显示的是捆绑包而不是原始代码:
这是我的 webpack.config.js:
module.exports = {
entry: [
'webpack-dev-server/client?http://localhost:8080/',
'webpack/hot/dev-server',
"./src/index.js"
],
output: {
filename: 'bundle.js',
path: '/',
},
debug: true,
devtool: 'source-map',
resolve: {
extensions: ['', '.jsx', '.scss', '.js', '.json']
},
module: {
loaders: [
{
test: /(\.js|\.jsx)$/,
exclude: /node_modules/,
loaders: ['react-hot','babel']
},
{
test: /\.scss$/,
exclude: /node_modules/,
loaders: ["style", "css?sourceMap", "sass?sourceMap"]
}
]
},
devServer: { hot: true },
plugins: [ new webpack.HotModuleReplacementPlugin() ],
inline: true,
progress: true,
colors: true
};
这是我的 package.json:
{
"name": "react-template",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"dev:test": "./node_modules/.bin/webpack --config webpack.test.config.js",
"test:bundle": "./node_modules/.bin/tape test/bundle.js",
"dev:serve": "./node_modules/.bin/webpack-dev-server --config webpack.development.config.js"
},
"devDependencies": {
"babel-loader": "^6.2.1",
"babel-preset-es2015": "^6.3.13",
"babel-preset-react": "^6.3.13",
"babel-preset-stage-0": "^6.3.13",
"css-loader": "^0.23.1",
"node-sass": "^3.8.0",
"on-build-webpack": "^0.1.0",
"react": "^0.14.6",
"react-dom": "^0.14.6",
"react-hot-loader": "^1.3.0",
"sass-loader": "^3.2.1",
"style-loader": "^0.13.0",
"tape": "^4.4.0",
"webpack": "^1.12.12",
"webpack-dev-server": "^1.14.1"
}
}
我尝试了
devtool
选项的多种变体,并阅读了 this、this 和 this,但没有运气。
任何帮助都会很棒!
在 webpack.config.js 文件中添加以下内容:
devtool: "inline-source-map",
你可以从webpack网站找到清晰的信息:
SourceMap 作为 DataUrl 添加到捆绑包中。
确保您的
--mode development
构建脚本中有 npm
,
{
"name": "test",
"version": "1.0.1",
"description": "",
"scripts": {
"build": "webpack",
"start": "webpack-dev-server --mode development --open"
"test": "echo \"Error: no test specified\" && exit 1",
},
"author": "",
"license": "",
"devDependencies": {
"babel-core": "^6.26.3",
"babel-loader": "^7.1.5",
"babel-preset-env": "^1.7.0",
"webpack": "^4.19.1",
"webpack-cli": "^3.1.0",
"webpack-dev-server": "^3.1.8"
},
"dependencies": {}
}
webpack.config.js
const path = require('path');
var webpack = require('webpack');
module.exports = {
entry: './src/web.js',
devtool: 'inline-source-map',
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'dist')
},
mode: 'development',
module: {
rules: [{
test: /\.js$/,
exclude: /(node_modules)/,
use: {
loader: "babel-loader",
options: {
presets: ["babel-preset-env"]
}
}
}]
},
devServer: {
inline: true,
contentBase: path.join(__dirname, 'dist'),
compress: true,
port: 9000,
watchOptions: {
index: 'index.html',
open: true,
poll: true,
watchContentBase: true
}
},
watch: true,
watchOptions: {
aggregateTimeout: 500,
ignored: /node_modules/,
poll: 3000
}
}
我面临的问题是我的
nginx
配置。我的 nginx 配置对源映射文件抛出 404 错误,因为它无法识别要查找的 .map
文件。所以除了 .map
之外还添加了 .js|.css
并且它被修复了。
location ~* \.(?:css|js|map)$ {
expires 1y;
access_log off;
add_header Cache-Control "public";
}
对我来说,问题是我的 html 中有一个特殊字符“ß”:
<textarea
id="start_location"
defaultValue="Gerwigstraße 22, 76131 Karlsruhe"
/>
将默认值更改为
"Gerwigstraße 22, 76131 Karlsruhe"
,源地图再次工作。
如果您的“source-map”不起作用,您可以尝试“inline-source-map”:
devtool: 'inline-source-map',
或者如果您仍然想使用“source-map”,您可以尝试在插件中添加这一行:
plugins: [
...
new webpack.SourceMapDevToolPlugin({
test: new RegExp('\.[js|css|mjs].*')
})
],