是否可以在浏览器中使用webpack动态配置`publicPath`?

Mik*_*ver 12 javascript webpack

我有一个项目,我将相同的webpack JS包部署到多个不同的环境.有些环境使用CDN来提供像JS文件这样的静态资产,而有些环境只使用与项目其余部分相同的根提供静态资产.

这个项目还有多个异步webpack块,所以我定义了一个publicPath正确加载它们.

当部署到非cdn时,webpack publicPath在我的webpack配置中静态配置工作正常,可以提供类似的东西/static/.

但是,当部署到使用CDN的环境时,这不再适用于异步块,因为webpack将尝试访问这些,/static/这意味着他们会询问主应用服务器而不是CDN.

显然,我可以用我的CDN重新构建项目publicPath来解决这个问题.但是,我更愿意在这两种情况下只使用一个部署包.

我的服务器端应用程序提供了一个javascript全局详细说明了CDN根路径window.staticCDNRoot.而且这种全局性也出现在非cdn情况下,只是指向应用服务器 - 所以它总是解析到正确的位置来加载静态资产.

有没有什么方法可以让webpack在运行时使用它,这样publicPathwindow.staticCDNRoot + publicPath没有大的hackery?

或者这个问题有更好的解决方案吗?

Mik*_*ver 10

好吧所以我整天都在寻找这个,然后在决定发布之后才发现它!

以防万一其他人需要这个:

解决方案是__webpack_public_path__在进行生产构建时在运行时定义.但要注意不要在开发中使用它,因为它会弄乱模块热负载.

更多信息:

http://webpack.github.io/docs/configuration.html#output-publicpath

  • 我见过几个人提到这个但是没有 - 一个人上传了一个例子,你可以在输入文件的要点和你如何添加变量吗?谢谢 (2认同)