Skip to content
Published:

在 gatsbyjs 中如何将静态资源上传对象存储(oss, s3...

用 gatsby 写完了一个官网,需要将静态资源上传对象存储,一开始尝试使用webpack-alioss-plugin,在项目中添加自定义 Webpack 配置,在gatsby-node.js中导出一个名为的函数onCreateWebpackConfig,去写AliOSSPlugin,但 AliOSSPlugin 与 gatsby 的配套不一定好,

最终,使用gatsby-plugin-s3这个插件,以将 gatsby 站点部署到 S3 存储桶

{
      resolve: `gatsby-plugin-s3`,
      options: {
        bucketName: `your-bucketName`,
        region:`your-region`,
        protocol: "https",
        hostname: "your-hostname",
        customAwsEndpointHostname: "your-Endpoint",
        // mergeCachingParams:true,
        parallelLimit:100,
        params:{
          'static/**': {
            CacheControl: 'public, max-age=2592000, immutable'
          },
          '*.{js,css}':{
            CacheControl: 'public, max-age=2592000, immutable'
          }
        }
      },
    },

但是要注意,要将 assetPrefix 设置好,build 是时候相应的要加上--prefix-paths

这样,build 完后执行npx gatsby-plugin-s3 deploy --yes或者进入package.json 修改script

就完成了对象存储

遇到个坑

默认情况下 Gatsby-plugin-s3 的 removeNonexistentObjects 属性为 false,这就意味着每次上传之后,都会覆盖掉上一版本的静态资源,这显然是不合理的,当我开发完一个功能后,跑流水上传了对象存储,staging 环境下的跑完之后。prod 环境甚至是线上环境所需资源再 aws 上找不到了