webpack-dev-server:自动重新加载 tampermonkey 脚本

webpack-dev-server: auto reload for tampermonkey script

我正在尝试使用 webpack-userscript 插件让 webpack-dev-server 自动重新加载我正在写入 运行 的脚本作为 Tampermonkey 中的用户脚本。我怀疑问题是脚本在外部网站而不是本地主机上执行 运行,所以我根本不知道这是否可能。

我观察到脚本正在尝试向 https://<external website host>:8080/sockjs-node/ 而不是 ws://localhost:8080/sockjs-node 发出请求。我尝试在开发服务器配置中使用代理,但它不起作用,我不确定这是否真的是正确的方法。

devServer: {
   contentBase: path.join(__dirname, 'dist'),
   proxy: {
      '/sockjs-node': {
         target: 'ws://localhost:8080',
         secure: false,
         ws: true,
      },
   },
},

我在设置代理后观察到的一件事是,请求从 https://<external website host>:8080/sockjs-node/ 更改为 https://localhost:8080/sockjs-node/,现在它继续请求 https://localhost:8080/sockjs-node/,即使我删除了代理。

经过反复试验,我找到了解决方案。问题是外部站点是通过 https 提供服务的,浏览器会阻止这些站点的不安全套接字连接。

所以我不得不将开发服务器配置为也使用 https,但是默认的自签名证书是不够的。根据 this comment,我使用 mkcert 创建了一个根 CA 和一个本地主机证书(在 Windows 上,我不得不手动将根 CA 添加到浏览器的证书存储中)然后配置很简单:

devServer: {
   contentBase: path.join(__dirname, 'dist'),
   disableHostCheck: true,
   https: {
      key: readFileSync(path.resolve('../../localhost-key.pem')),
      cert: readFileSync(path.resolve('../../localhost.pem')),
      ca: readFileSync(path.join(os.homedir(), 'AppData/Local/mkcert/rootCA.pem')),
   },
},