reactjs - Webpack:是否可以仅在生产中隐藏源 map ?

标签 reactjs webpack babeljs

我想在浏览器中本地调试我的 React 应用程序, 但是我在 webpack.config.js 文件中将 devtool 属性设置为 hidden-source-map 以便在生产中隐藏我的源代码。 是否有可能在不将我的源映射暴露给生产环境的情况下进行本地调试?

最佳答案

您可以在生产环境中启用 source-map,但将其托管在只允许来自白名单 IP 的请求的服务器中。如果请求来自非白名单 IP,您可以直接返回错误 403 或 404。

假设您正在将源 map 上传到 amazon s3:

// we use webpack.SourceMapDevToolPlugin for more flexible setups. Set the 'devtool' option to 'false' when you are doing this.
plugins: [
   new webpack.SourceMapDevToolPlugin({
      filename: '[name].[contenthash].js.map',
      // this is a s3 private bucket that is only accessible via whitelisted IPs
      // regular user will not be able to access the bucket
      append: `\n//# sourceMappingURL=https://s3.ap-southeast-1.amazonaws.com/sources-maps/[url]`,
      ...options,
    }),

    // other plugins.
  ]

你生成的 JS 仍然会在文件末尾有神奇的注释:

//# sourceMappingURL=https://s3.ap-southeast-1.amazonaws.com/sources-maps/main.js.map

但是浏览器开发者工具只有在从白名单 IP 访问它时才能下载源映射,例如您的办公室网络、公司 VPN 等。

另一种方法是您可以将 sourceMappingURL 设置为 localhost。使用这种方法,您应该在您的机器上本地获得所有 *.map 文件。当你想调试生产代码时,只需在本地启动一个静态服务器(例如:ecstatic)来提供源映射。这样,您可以确定只有您可以访问源 map 。但是,它需要手动工作才能在本地下载和提供源 map 。

关于reactjs - Webpack:是否可以仅在生产中隐藏源 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59700199/

相关文章:

javascript - gitlab 上的 CI/CD 无法使用 babel-loader 进行编译

reactjs - React + React Native 入门套件

javascript - 导入节点模块时出现流错误 "cant resolve module"

javascript - 将 React 与 Express 混合?

javascript - tsconfig 的 'outFile' 和 webpack config 的 'output' 有什么区别

vue.js - 如何在应用程序之间传递Vue 3中的createApp?

javascript - 为什么 event.target.value 不包含数字输入的 "."和 "e"?

reactjs - 如何在不使用函数的情况下在 Firebase 主机上渲染 ssr 项目?

javascript - Babel 没有将 ES6 转换为浏览器可以理解的 JavaScript

javascript - Grunt Babel 每个文件耗时 6 秒