问题描述
一般情况下,我们在使用Webpack
时,都会通过以下方式指定publicPath
,它表示静态资源的访问地址。
1 | { |
如果你需要把静态资源放在 CDN 上,则同样可行。
1 | { |
但是这样就把静态资源的地址写死了,而测试环境和生产环境的静态资源往往存在在不同的地方。OK,下面我就通过__webpack_public_path__
变量来实现。
解决方法
- 在
webpack
配置文件(比如webpack.config.babel.js
)中删除publicPath
的选项。
1 | output: { |
- 在
html
模板文件中添加以下代码
1 | <script>window.webpackPublicPath = '<域名,可以由后端运行时改写,或由前端发布资源时改写>';</script> |
- 上个步骤中后端已经给我们提供了静态资源访问地址了,那么怎么应用到静态资源中呢?创建一个新文件,名字自己定,比如叫做
webpack.js
。
1 | /* eslint-disable */ |
- 在 App 的入口文件的首行添加以下代码,其中
./webpack.js
就代表第三步创建的文件。
1 | /* eslint-disable import/first */ |
通过以上 4 个步骤即可实现有后端在代码运行时期指定publicPath
了。