rollupjs - Rollup JS 使用 rollup-plugin-modify 插件构建不替换构建文件中的所有字符串实例(使用 'replace-in-file' 插件代替)
问题描述
我想在 Svelte 应用程序中解决文件缓存更新问题,并且想要汇总构建的这一部分。我决定向分布式构建脚本中的文件引用(例如'index.html?v=0.1')添加一个查询字符串参数。我在 rollup.config.js 脚本中创建了一个常量“ __cVersion__
”并尝试使用“rollup-plugin-modify”,但这仅更新了我的 main.js 和 App.svelte 代码(正在编译的文件)。我还尝试了具有相同结果的“@rollup/plugin-replace”插件。我需要我也从 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
插件会在 rollup 的buildEnd
钩子上触发。
设置钩子writeBundle
为我解决了这个问题,如下所示:
copy({
targets: [
{
src: ...,
dest: ...
},
...
],
hook: "writeBundle",
}),
推荐阅读
- c++ - 具有 constexpr 构造函数的嵌套类,从具有非 constexpr 构造函数的模板参数派生时是否合法?
- autodesk-forge - 如何从 Forge 查看器中导出包含 MarkupsCore 标记的 .dwg 文件?
- selenium - 错误 [严重]:从渲染器接收消息超时:20.000 在 Jenkins 上通过 Selenium 执行测试套件时
- php - 使用数组值填充表单并使用表单访问数据库
- flutter - 带有自动完成功能的 Flutter 搜索栏
- statistics - 检验大型不平衡面板数据中的异方差性和自相关性
- android - 如何从 shell 脚本调用 Android OS API?
- java - 将执行流程从一个 jframe 传递到 JAVA 中的另一个 jframe
- javascript - 嵌套表单中的动态选择
- javascript - 将对象数组传递给greensocks的贝塞尔曲线导致错误