2017-05-04 71 views
3

我们使用带有React的webpack 1.x来捆绑我们的应用程序。此外,为了胸围缓存时,JavaScript文件已经改变,我们有我们的输出webpack.config.js设置为:部署新的Webpack软件包会导致错误,直到页面刷新

output: { 
    path: __dirname + '/dist', 
    filename: 'index_bundle.[chunkhash:10].js', 
    publicPath: '/' 
}, 

这成功地完成我们的,当应用程序的新版本部署更改文件名的目标。在成功部署时,可以看到新文件在那里。

当部署期间用户在应用程序中时会出现皱纹。突然之间,曾经存在的区块并没有,而index.html成功更新时,浏览器当前正在使用的一些区块对旧的,不存在的文件提出错误请求。

webpack处理交换机是否有一种常规方式?或者在我们的React应用程序中,以优雅地处理不良的组件导入。我们在S3上托管,其中(如流星,我在印象之下)回落到index.html上的一个不存在的文件请求。在我们的应用程序中,这会导致Syntax error: Unexpected token <错误,因为它期望的是javascript,而不是HTML。

编辑:为了避免在我的React应用程序中导入错误,也许我可以在路径的index.js文件中应用逻辑?目前我getComponent调用看起来简直像这样:

getComponent(nextState, callback) { 
    require.ensure([], (require) => { 
    callback(null, require('./components/HomePage').default); 
    }); 
} 

编辑2:Found an answer to my issue here.

+0

有些事情是不对的。如果你正在服务一个html(因为一个不存在的文件),你应该用'HTTP 404'来回答它,这会迫使浏览器忽略该文件并跳过解析。 – enapupe

+0

S3上的静态网站托管的默认设置是让文件在发生错误时返回(包括无法找到所述文件)。这就是说,即使如此,我的React应用程序有没有办法查看404(或错误的文件类型)并避免任何类型的错误?我的路由index.js文件的getComponent已被添加到 –

回答

1

,如果你没有删除S3旧的文件是什么?

如果你用不同的chunkhash上传,推测你可以保留旧的hash'ed文件一段时间?

+0

以上这是一个潜在的选项。理想情况下,我们希望不必这样做,因为我们目前在部署期间删除旧文件。 –