如何使用webpack更改`sourceMappingURL`

Ky6*_*6uk 8 javascript cdn uglifyjs source-maps webpack

我的生产webpack配置是:

{
  output: {
    publicPath: "https://cdn.example.com/sub-directory/",
    filename: '[name]-[chunkhash].min.js'
  },

  devtool: 'source-map',

  plugins: [
    new webpack.optimize.UglifyJsPlugin()
  ]
}
Run Code Online (Sandbox Code Playgroud)

现在我有两个文件app-12345.min.jsapp-12345.min.js.map.

我也https://cdn.example.com/sub-directory/app-12345.min.js为主脚本自动生成了CDN URL .

sourceMappingURL仍然是相对路径//# sourceMappingURL=app-12345.min.js.map,不能直接在浏览器中访问.

我的问题是我如何设置sourceMappingURL为绝对自动生成的路径?

orn*_*rnj 8

SourceMapDevToolPlugin插件是一个选项.

new webpack.SourceMapDevToolPlugin({
    filename: '[file].map',
    append: '\n//# sourceMappingURL=' + path + '[url]'
});
Run Code Online (Sandbox Code Playgroud)


Ky6*_*6uk 6

最后,可以使用@omj响应中的指南以及以下配置在Webpack 3中实现

  devtool: 'hidden-source-map', // SourceMap without reference in original file

  new webpack.SourceMapDevToolPlugin({
    filename: '[file].map',
    append: `\n//# sourceMappingURL=${path}[url]`
  })
Run Code Online (Sandbox Code Playgroud)

更新(Webpack v3.10.0):

自Webpack以来已添加了一个新选项v3.10.0。该选项称为publicPath

new webpack.SourceMapDevToolPlugin({
  filename: '[file].map',
  publicPath: 'https://example.com/dev/'
});
Run Code Online (Sandbox Code Playgroud)


Dav*_*han 6

请注意开发工具: false。如果您想提供自定义值,则需要它。这适用于 webpack 4.x:

module.exports = {
  // ...
  devtool: false,
  plugins: [
    new webpack.SourceMapDevToolPlugin({
       filename: 'sourcemaps/[file].map',
       publicPath: 'https://example.com/project/',
       fileContext: 'public'
  })
  ]
};
Run Code Online (Sandbox Code Playgroud)