【发布时间】:2021-11-19 14:16:38
【问题描述】:
我有一个 Blazor WASM .NET6 应用程序,它在其 index.html 中使用两个样式表:
<link href="css/app.min.css" rel="stylesheet" />
<link href="css/Client.min.css" rel="stylesheet" />
如何在构建时向文件添加一些版本号或日期,例如:
<link href="css/app.min.20211119.css" rel="stylesheet" />
<link href="css/Client.min.20211119.css" rel="stylesheet" />
触发浏览器下载新副本?
我的构建管道中已经设置了 PostCSS,所以我可以使用 npm 解决方案。
它需要创建新文件并更新 index.html
我发现了几个类似的问题,但都没有有效的解决方案。
更新:
我找到了Replace in file npm 包,它似乎可以满足我的需要。将它与fs.rename npm 包结合使用,我应该能够在我的文件名中添加指纹并更改我的 index.html 中的链接。
我已经想出了如何为 index.html 中的链接执行此操作:
// in package.json
"fingerprint": "replace-in-file --configFile=fingerprint.config.js"
// in fingerprint.config.js
module.exports = {
files: 'wwwroot/index.html',
from: [/app.(min|[0-9]*).css/g, /Client.(min|[0-9]*).css/g],
to: ['app.' + require('dayjs')().format('YYYYMMDDHHmm') + '.css', 'Client.' + require('dayjs')().format('YYYYMMDDHHmm') + '.css'],
};
这段代码在后期构建中运行,所以这段 javascript 中没有任何内容最终出现在最终代码中。
我整天都在尝试重命名实际的 CSS 文件。但不能让它工作。 我的尝试:
// In package.json
"rename:fs": "node -e \"require('fs').rename('wwwroot/css/app.min.css', 'wwwroot/css/app.'+require('dayjs')().format('YYYYMMDDHHmm')+'.css', () => {})\"",
"rename:2": "renamer --dry-run --find \"/^(app|Client).(min|[0-9]*).css$/\" --replace \"$1.bar.css\" \"wwwroot/css/*\"",
"rename": "node -e rename.js"
// rename.js
const fs = require('fs');
const path = require('path');
//var args = process.argv.slice(2);
var dir = "wwwroot/css/";
var match = RegExp("^(app|Client).(min|[0-9]*).css$", 'g');
var fp = require('dayjs')().format('YYYYMMDDHHmm');
var replace = RegExp('$1.' + fp + '.css');
var files;
//reading the dir
files = fs.readdirSync(dir);
files.filter(function (file) {
return file.match(match);
}).forEach(function (file) {
var filePath = path.join(dir, file),
newFilePath = path.join(dir, file.replace(match, replace));
//using fs.rename function to rename files
fs.renameSync(filePath, newFilePath);
});
重命名器版本rename:2 效果最好。我可以在查找部分使用 RegEx,但无法在替换部分使用。
现在我将坚持更改查询字符串,而不是我想要的解决方案。但现在已经足够了。
【问题讨论】:
标签: browser-cache blazor-webassembly