Node.js Grunt模块将所有静态资产上载到S3/CloudFront,替换路径,并使旧资产无效

Node.js Grunt模块将所有静态资产上载到S3/CloudFront,替换路径,并使旧资产无效,node.js,express,amazon-s3,gruntjs,amazon-cloudfront,Node.js,Express,Amazon S3,Gruntjs,Amazon Cloudfront,使用Grunt、NodeJs和Express,我应该使用哪些模块来: 通过查看资产目录或通过代码库进行解析,发现应用程序中的所有静态资产(前端JS、CSS、图像) 将资产上载到AmazonS3/CloudFront,使用唯一的“指纹”名称重命名每个文件 用CloudFront URL替换代码库中每个资产的路径 使旧CDN资产失效 这是我第一次使用CloudFront。我不确定是否可以用Grunt完成上述所有工作,或者它是否最好作为Node/Express模块来完成 带栏杆: 我正在为节点堆栈寻找

使用Grunt、NodeJs和Express,我应该使用哪些模块来:

  • 通过查看资产目录或通过代码库进行解析,发现应用程序中的所有静态资产(前端JS、CSS、图像)

  • 将资产上载到AmazonS3/CloudFront,使用唯一的“指纹”名称重命名每个文件

  • 用CloudFront URL替换代码库中每个资产的路径

  • 使旧CDN资产失效

  • 这是我第一次使用CloudFront。我不确定是否可以用Grunt完成上述所有工作,或者它是否最好作为Node/Express模块来完成

    带栏杆:


    我正在为节点堆栈寻找类似的解决方案。

    使CDN资产无效是个坏主意。在CloudFront中,可能需要15分钟才能完成—这将为您的部署增加15分钟。此外,一些浏览器可能会保存旧文件,因为URL是相同的

    相反,您可能应该对静态资产进行版本设置,并以不同的版本名发布新版本

    例如:

    my-app/1.2.3/main.js
    my-app/1.2.4/main.js
    
    等等,等等

    这给了您两个优势:

    • 你可以自信地永远缓存。相同的URL将始终服务于相同的文件
    • 您可以在发生灾难时快速回滚。旧文件就在原来的地方
    对于部署到S3,有专门的插件。 一、 不过,我更喜欢简单地与官方配合使用

    对其进行配置将如下所示:

    shell: {
      cp: {
        command: "aws s3 cp --recursive dist/ s3://my-bucket/my-app/"
      }
    }
    

    您可以使用grunt从某处读取版本变量,并自动将所有文件放入
    dist/{version}/
    文件夹中,同时将html中的任何路径替换为正确的
    version
    路径。

    当然,灾难回滚是保持content versionedLove此方法的一个重要原因。我将使用哪个模块来执行(3)-“用CloudFront URL替换代码库中每个资产的路径?”您是否使用grunt或express来处理此问题?您可以使用中的
    流程
    选项。从一个目录复制到另一个目录时,只需用正则表达式替换路径即可。有更多的高级插件,但我发现拷贝就足够了。下面是一个个人示例:我们现在正在实施此功能-您将应用程序版本存储在哪里?咕哝app?package.json中的配置文件。参见github.com/vtex/releasy
    shell: {
      cp: {
        command: "aws s3 cp --recursive dist/ s3://my-bucket/my-app/"
      }
    }