Node.js Grunt模块将所有静态资产上载到S3/CloudFront,替换路径,并使旧资产无效
使用Grunt、NodeJs和Express,我应该使用哪些模块来: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模块来完成 带栏杆: 我正在为节点堆栈寻找
我正在为节点堆栈寻找类似的解决方案。使CDN资产无效是个坏主意。在CloudFront中,可能需要15分钟才能完成—这将为您的部署增加15分钟。此外,一些浏览器可能会保存旧文件,因为URL是相同的 相反,您可能应该对静态资产进行版本设置,并以不同的版本名发布新版本 例如:
my-app/1.2.3/main.js
my-app/1.2.4/main.js
等等,等等
这给了您两个优势:
- 你可以自信地永远缓存。相同的URL将始终服务于相同的文件
- 您可以在发生灾难时快速回滚。旧文件就在原来的地方
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/"
}
}