使用rollup-plugin-modify插件的汇总JS构建,不替换构建文件中的所有字符串实例(改用'replace-in-file'插件)



我想在Svelte应用程序中解决文件缓存更新问题,并希望这部分是汇总构建。我决定在分布式构建脚本中的文件引用(如"index.html?v=0.1"(中添加一个querystring参数。我在rollup.config.js脚本中创建了一个常量"__cVersion__",并尝试使用"rollup-plugin-modify",但这只更新了我的main.js和App.svelte代码(正在编译的文件(。我还尝试了"@rollup/plugin-replaces"插件,结果相同。我需要从src复制(而不是构建(到public的文件,以便在脚本中替换"__cVersion__"的实例。

以下是我最初的rollup.config.js导出函数(不起作用的字符串替换(:

export default {
input: 'src/main.js',
output: {
sourcemap: true,
format: 'iife',
name: 'app',
file: 'public/build/bundle.js'
},
plugins: [
// this only seems to work on the main.js and .svelte files
modify({ 
'__cVersion__': 'c0.1.19'
}),
svelte({
dev: !production,
css: css => {
css.write('public/build/bundle.css');
}
}),
copy({
targets: [{ 
src: 'src/bs4.4.1.css', 
dest: 'public/' 
},
{ 
src: 'src/sw.js',
dest: 'public/' 
},
{ 
src: 'src/index.html',
dest: 'public/' 
},
{ 
src: 'src/manifest.json', 
dest: 'public/' 
},
{ 
src: 'src/images/*', 
dest: 'public/images/'
}
]
}),
resolve({
browser: true,
dedupe: ['svelte']
}),
commonjs(),
// cache files
workbox({
mode: 'injectManifest',
options: {
swSrc: 'src/sw.js',
swDest: 'public/sw.js',
globDirectory: 'public',
globPatterns: [
'**/*.{html,json,js,css,png,map}',
'./manifest.json',
'./images/**',
'./bs4.4.1.css',
'./index.html'
]
}
}),
!production && serve(),
!production && livereload('public'),
production && terser()
],
watch: {
clearScreen: false
}
};

默认情况下,rollup-plugin-copy插件将在汇总的buildEnd挂钩上触发
将挂钩设置为writeBundle为我解决了这个问题,如下所示:

copy({
targets: [
{ 
src: ..., 
dest: ... 
},
...
],
hook: "writeBundle",
}),

我决定采取不同的方法,因为我意识到在尝试替换文件中的"__cVersion__"之前需要完成构建过程。经过一番尝试和错误,我决定使用以下代码:https://github.com/kuhlaid/svelte2/releases/tag/v0.1.7

如果你在源代码中搜索"__cVersion__",你会看到我在哪里添加文件修订字符串,试图强制更新文件缓存。。。然而,这并没有完全解决问题。

然后,我查看了服务工作者(sw.js(,意识到Workbox"injectManifest"实际上是在处理文件修订。我当前设置的唯一问题是,我在脚本中添加了"__cVersion__"常量,但Workbox从未看到替换,因为在我替换常量之前,Workbox处理了服务工作者。

我可能需要做的是将src文件复制到一个"暂存目录"中,在那里我可以替换脚本中的"缓存"常量,然后运行暂存文件的构建汇总。这"应该"导致Workbox将文件视为已更新文件,从而在服务工作者文件中为其分配不同的修订号。当我解决了这个问题时,我会尝试更新这个线程。

最新更新