svelte - 从 Svelte 项目输出单个 HTML 文件

标签 svelte rollup rollupjs svelte-3

我在网上找不到任何示例来说明如何(或者如果我们可以)使用 Rollup(不是 Webpack)从 Svelte 项目中输出单个 HTML 文件,其中包含内联注入(inject)的所有 CSS 和 JS(而不是作为脚本中的 URL) .

最佳答案

没有内置的方法可以实现这一点,因此您必须编写自己的插件才能做到这一点。此代码是完成此操作的某种尝试,可以作为起点。它绝不是真正完整或好的。 (老实说,我怀疑你会用这种方法赢得任何形式的表现)

import svelte from 'rollup-plugin-svelte';
import fs from 'fs';
import path from 'path';

function inlineSvelte(template, dest) {
    return {
        name: 'Svelte Inliner',
        generateBundle(opts, bundle) {
            const file = path.parse(opts.file).base
            const code = bundle[file].code
            const output = fs.readFileSync(template, 'utf-8')
            bundle[file].code = output.replace('%%script%%', () => code)
        }
    }
}

export default {
    input: 'src/main.js',
    output: {
        format: 'iife',
        file: './public/index.html',
        name: 'app'
    },
    plugins: [
        svelte({
        }),
        inlineSvelte('./src/template.html')
    ]
};
这将依赖于一个 template.html 文件,它最基本的会像这样
<html>
    <head>
        <script>%%script%%</script>
    </head>
    <body></body>
</html>

关于svelte - 从 Svelte 项目输出单个 HTML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61565251/

相关文章:

javascript - 解析源映射失败

Mysql Rollup repeatingid字段

reactjs - Rollup ESM 生成损坏的导入

html - 为什么使用 'focus-within' 的按钮在 iOS 上不起作用

angular - 带有 typescript 2路径别名的Rollup Angular 2

javascript - 使用 rollup.js 的 package.json 中的 pkg.module (.esm.js) 有什么意义

javascript - (!) 未使用的外部导入。 'reduce' 从外部模块 'lodash' 导入但从未使用过

typescript - Sveltekit - 从 lib 访问 session

用于创建 Svelte 元素而不是模板的 JavaScript API

ios - 是否可以将 Svelte/Sapper 应用程序转换为 Cordova