TL; DR
我需要在SourceMapDevToolPlugin中设置哪些配置选项来模拟devtool: 'source-map'
?
我必须使用SourceMapDevToolPlugin
来避免为我的供应商模块生成源映射。...但是我想要source-map
样式映射,而不是inline-source-map
详细信息:
我使用的是webpack 4,不想浪费时间生成vendor.js.map
,所以我不能只设置devtool
,而是这样做:
https://webpack.js.org/plugins/source-map-dev-tool-plugin/#exclude-vendor-maps
但我注意到此评论:
您可以使用以下代码将配置选项devtool:inline-source-map替换为等效的自定义插件配置:
我一生都无法确定要传递给插件以复制devtool: 'source-map'
(而不是inline-source-map
)的哪些选项
我的package.json:
"scripts": {
"build": "webpack -p --config webpack.prod.js",
"start": "webpack-dev-server --debug --bail --config webpack.dev.js"
},
我的(相对)webpack配置:
module.exports = {
devtool: false, // using SourceMapDevToolPlugin instead
optimization: {
splitChunks: {
cacheGroups: {
commons: {
test: /[\\/]node_modules[\\/]/,
name: 'vendors',
chunks: 'all'
},
styles: {
test: /\.css$/,
name: 'styles',
chunks: 'all'
}
}
},
plugins: [
new webpack.SourceMapDevToolPlugin({
filename: '[name].map',
exclude: ['vendor.js']
})
]
}
和我的开发配置:
module.exports = merge(common, {
mode: 'development',
devServer: {
contentBase: './public',
stats: 'minimal'
}
});
和我的产品配置
module.exports = merge(common, {
mode: 'production',
stats: 'errors-only'
});
答案 0 :(得分:0)
在文档中,重点是我的
DELETE LT
FROM [LiveTable] LT
LEFT JOIN [FailedDeadLine] FD1 ON LT.WorkID=FD1.WorkID
LEFT JOIN [FailedDeadline] FD2 ON LT.WorkID=FD2.WorkID
WHERE (FD1.WorkID IS NULL OR LT.EmployeeID<>FD2.EmployeeID)
(filename
):定义SourceMap的输出文件名(如果未提供值,将 内联 )。
这意味着,如果您指定string
选项,则与filename
的行为相同
devtool: 'source-map'
=== devtool: 'inline-source-map'
new webpack.SourceMapDevToolPlugin({})
=== devtool: 'source-map'
答案 1 :(得分:0)
我遇到了同样的问题,试图从源地图中排除部分代码。由于无法在Internet上获得满意的答案,因此我查看了Webpack的源代码,并找到了Webpack使用的以下代码
https://github.com/webpack/webpack/blob/master/lib/WebpackOptionsApply.js
if (
options.devtool &&
(options.devtool.includes("sourcemap") ||
options.devtool.includes("source-map"))
) {
const hidden = options.devtool.includes("hidden");
const inline = options.devtool.includes("inline");
const evalWrapped = options.devtool.includes("eval");
const cheap = options.devtool.includes("cheap");
const moduleMaps = options.devtool.includes("module");
noSources = options.devtool.includes("nosources");
legacy = options.devtool.includes("@");
modern = options.devtool.includes("#");
comment =
legacy && modern
? "\n/*\n//@ source" +
"MappingURL=[url]\n//# source" +
"MappingURL=[url]\n*/"
: legacy
? "\n/*\n//@ source" + "MappingURL=[url]\n*/"
: modern
? "\n//# source" + "MappingURL=[url]"
: null;
const Plugin = evalWrapped
? EvalSourceMapDevToolPlugin
: SourceMapDevToolPlugin;
new Plugin({
filename: inline ? null : options.output.sourceMapFilename,
moduleFilenameTemplate: options.output.devtoolModuleFilenameTemplate,
fallbackModuleFilenameTemplate:
options.output.devtoolFallbackModuleFilenameTemplate,
append: hidden ? false : comment,
module: moduleMaps ? true : cheap ? false : true,
columns: cheap ? false : true,
lineToLine: options.output.devtoolLineToLine,
noSources: noSources,
namespace: options.output.devtoolNamespace
}).apply(compiler);
}
因此,您可以看到,SourceMapDevToolPlugin的选项可能取决于您的某些输出Webpack配置(sourceMapFilename,devtoolModuleFilenameTemplate,devtoolFallbackModuleFilenameTemplate,devtoolLineToLine,devtoolNamespace-请参见https://webpack.js.org/configuration/output)。
对于我的webpack配置,当我使用devtool时,进入SourceMapDevToolPlugin的最终选项如下:'source-map':
{
"filename": "[file].map[query]",
"append": null,
"module": true,
"columns": true,
"lineToLine": false,
"noSources": false,
"namespace": ""
}
如果您不使用任何上述输出选项,那么上面的内容对您来说应该没问题。否则,您将需要考虑它们。您可以修改node_modules / webpack / lib / WebpackOptionsApply.js以使用JSON.stringify()添加console.log,以查看用于Webpack配置的确切参数。
希望这会有所帮助。